Heim >Backend-Entwicklung >PHP-Tutorial >Wie können wir die var_dump-Ausgabe eines PHP-Arrays effektiv wieder in eine verwendbare Array-Variable umwandeln?

Wie können wir die var_dump-Ausgabe eines PHP-Arrays effektiv wieder in eine verwendbare Array-Variable umwandeln?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 01:46:02651Durchsuche

How can we effectively convert a PHP array's var_dump output back into a usable array variable?

Var_dump des Arrays zurück in eine Array-Variable konvertieren

Einführung

Abrufen des ursprünglichen Arrays von Die Ausgabe von var_dump kann eine entmutigende Aufgabe sein. In diesem Artikel werden kreative Methoden zur Bewältigung dieser Herausforderung in PHP untersucht.

Herausforderungsbeschreibung

Angesichts eines Arrays mit mehrdimensionalen Elementen besteht das Ziel darin, eine wiederverwendbare Funktion zu erstellen, die das zurückkonvertiert var_dump-Ausgabe zurück in eine PHP-Array-Variable. Diese Funktion sollte effizient sein und komplexe Array-Strukturen verarbeiten.

Naiver Ansatz

Der Versuch, die var_dump-Ausgabe mithilfe regulärer Ausdrücke umzukehren, ist möglicherweise nicht optimal. Das Parsen und erneute Zusammensetzen der komplexen Syntax ist fehleranfällig.

Optimierte Lösung

Anstatt sich ausschließlich auf reguläre Ausdrücke zu verlassen, besteht ein kreativer Ansatz darin, die var_dump-Ausgabe in eine serialisierte Ausgabe umzuwandeln string und anschließendes Deserialisieren. Dadurch wird die Array-Struktur effektiv neu erstellt.

Implementierung

Der folgende Code definiert die unvar_dump-Funktion, die die obige Strategie implementiert:

<code class="php">function unvar_dump($str) {
    // Convert output to newline-separated format
    if (strpos($str, "\n") === false) {
        $str = preg_replace(['#(\[.*?\]=>)#', '#(string\(|int\(|float\(|array\(|NULL|object\(|})#'], "\n\1", $str);
        $str = trim($str);
    }
    
    // Perform regex-based replacements to prepare for serialization
    $regex = [
        '#^\040*NULL\040*$#m',
        '#^\s*array\((.*?)\)\s*{\s*$#m',
        '#^\s*string\((.*?)\)\s*(.*?)$#m',
        '#^\s*int\((.*?)\)\s*$#m',
        '#^\s*bool\(true\)\s*$#m',
        '#^\s*bool\(false\)\s*$#m',
        '#^\s*float\((.*?)\)\s*$#m',
        '#^\s*\[(\d+)\]\s*=>\s*$#m',
        '#\s*?\r?\n\s*#m',
    ];
    $replace = [
        'N',
        'a:\1:{',
        's:\1:\2',
        'i:\1',
        'b:1',
        'b:0',
        'd:\1',
        'i:\1',
        ';'
    ];
    $serialized = preg_replace($regex, $replace, $str);
    
    // Handle object and custom string keys using callback functions
    $func = create_function(
        '$match', 
        'return "s:".strlen($match[1]).":\"".$match[1]."\"";'
    );
    $serialized = preg_replace_callback(
        '#\s*\["(.*?)"\]\s*=>#', 
        $func,
        $serialized
    );
    $func = create_function(
        '$match', 
        'return "O:".strlen($match[1]).":\"".$match[1]."\":".$match[2].":{";'
    );
    $serialized = preg_replace_callback(
        '#object\((.*?)\).*?\((\d+)\)\s*{\s*;#', 
        $func, 
        $serialized
    );
    
    $serialized = preg_replace(
        array('#};#', '#{;#'), 
        array('}', '{'), 
        $serialized
    );

    // Unserialize the modified string to reconstruct the array
    return unserialize($serialized);
}</code>

Verwendungsbeispiel

Um diese Funktion zu verwenden, geben Sie einfach die var_dump-Ausgabe eines Arrays als Eingabeparameter an. Die Funktion gibt das ursprüngliche Array zurück.

Zum Beispiel bei der folgenden var_dump-Ausgabe:

array(4) {
  ["foo"]=>
  string(8) "Foo"bar""
  [0]=>
  int(4)
  [5]=>
  float(43.2)
  ["af"]=>
  array(3) {
    [0]=>
    string(3) "123"
    [1]=>
    object(stdClass)#2 (2) {
      ["bar"]=>
      string(4) "bart"
      ["foo"]=>
      array(1) {
        [0]=>
        string(2) "re"
      }
    }
    [2]=>
    NULL
  }
}

Die Funktion unvar_dump würde die ursprüngliche Array-Struktur zurückgeben:

array(
  "foo" => "Foo"bar"",
  0 => 4,
  5 => 43.2,
  "af" => array(
    0 => "123",
    1 => (object) [
      "bar" => "bart",
      "foo" => array(
        0 => "re"
      )
    ],
    2 => null
  )
)

Das obige ist der detaillierte Inhalt vonWie können wir die var_dump-Ausgabe eines PHP-Arrays effektiv wieder in eine verwendbare Array-Variable umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn