Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie ein Array aus der var_dump-Ausgabe in PHP neu erstellen?

Wie können Sie ein Array aus der var_dump-Ausgabe in PHP neu erstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 03:45:30315Durchsuche

How can you recreate an array from var_dump output in PHP?

Array-Daten aus der var_dump-Ausgabe wiederherstellen

Während var_export und serialize praktische Lösungen für die Konvertierung von Arrays in für Menschen lesbare Zeichenfolgen bzw. deren Rekonstruktion bieten , sie reichen für diese Code-Herausforderung nicht aus. Das Ziel besteht hier darin, einen optimierten und kreativen Ansatz zum Extrahieren der Array-Struktur aus der Ausgabe von var_dump zu erkunden.

Benutzerdefinierte Funktion für die Array-Extraktion

Die Lösung umfasst die Konvertierung der Ausgabe von var_dump in eine serialisierte Zeichenfolge umgewandelt, die dann deserialisiert werden kann, um das ursprüngliche Array wiederherzustellen. Um dies zu erreichen, wird die Funktion unvar_dump() verwendet:

Code:

<code class="php">function unvar_dump($str) {
    if (strpos($str, "\n") === false) {
        //Add new lines:
        $regex = array(
            '#(\[.*?\]=>)#',
            '#(string\(|int\(|float\(|array\(|NULL|object\(|})#',
        );
        $str = preg_replace($regex, "\n\1", $str);
        $str = trim($str);
    }
    $regex = array(
        '#^\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 = array(
        'N',
        'a:\1:{',
        's:\1:\2',
        'i:\1',
        'b:1',
        'b:0',
        'd:\1',
        'i:\1',
        ';'
    );
    $serialized = preg_replace($regex, $replace, $str);
    $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
    );

    return unserialize($serialized);
}
**Usage:** To use the function, simply pass the var_dump output as the input:

$originalArray = unvar_dump(var_dump($data));

Where $data is the original array that was var_dumped. The resulting $originalArray will now be a fully reconstructed array.

**Tested on Complex Structures**

Das obige ist der detaillierte Inhalt vonWie können Sie ein Array aus der var_dump-Ausgabe in PHP neu erstellen?. 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