Heim >Backend-Entwicklung >PHP-Tutorial >Wie können wir die var_dump-Ausgabe eines PHP-Arrays effektiv wieder in eine verwendbare Array-Variable umwandeln?
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!