Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah anda boleh mencipta semula tatasusunan daripada output var_dump dalam PHP?

Bagaimanakah anda boleh mencipta semula tatasusunan daripada output var_dump dalam PHP?

Mary-Kate Olsen
Lepaskan: 2024-10-27 03:45:30
asal
486 orang telah melayarinya

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

Memulihkan Data Tatasusunan daripada var_dump Output

Manakala var_export dan serialize menawarkan penyelesaian yang mudah untuk menukar tatasusunan kepada rentetan yang boleh dibaca manusia dan membina semulanya, masing-masing , mereka tidak mencukupi untuk cabaran kod ini. Matlamat di sini adalah untuk meneroka pendekatan yang dioptimumkan dan kreatif untuk mengekstrak struktur tatasusunan daripada output var_dump.

Fungsi Tersuai untuk Pengekstrakan Tatasusunan

Penyelesaian melibatkan penukaran output var_dump ke dalam rentetan bersiri, yang kemudiannya boleh dinyahsiri untuk mencipta semula tatasusunan asal. Untuk mencapai ini, fungsi unvar_dump() digunakan:

Kod:

<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:
Salin selepas log masuk

$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**
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah anda boleh mencipta semula tatasusunan daripada output var_dump dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan