Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah anda boleh membina semula tatasusunan PHP dengan berkesan daripada output var_dumpnya, memandangkan kekurangan penyelesaian asli dalam PHP?

Bagaimanakah anda boleh membina semula tatasusunan PHP dengan berkesan daripada output var_dumpnya, memandangkan kekurangan penyelesaian asli dalam PHP?

Susan Sarandon
Lepaskan: 2024-10-29 22:47:29
asal
784 orang telah melayarinya

How can you effectively reconstruct a PHP array from its var_dump output, given the lack of a native solution in PHP?

Memulihkan Struktur Tatasusunan daripada var_dump Output

Pengenalan:

Sering terlepas pandang, terdapat cabaran dalam PHP apabila seseorang mungkin menghadapi keperluan untuk membina semula tatasusunan daripada output var_dumpnya. Tugasan yang kelihatan mudah ini tidak mempunyai penyelesaian asli dalam PHP dan telah mencetuskan kreativiti dalam kalangan pembangun.

Pernyataan Masalah:

Memandangkan tatasusunan, tanpa mengira dimensinya, keluarkan var_dumpnya perwakilan:

<code class="php">$data = array('this' => array('is' => 'the'), 'challenge' => array('for' => array('you')));

$var_dump_output = array(2) 
{
    ["this"]=> array(1) ["is"]=> string(3) "the"
    ["challenge"]=> array(1) ["for"]=> array(1) [0]=> string(3) "you"
}</code>
Salin selepas log masuk

Cabarannya ialah untuk mencipta kaedah yang dioptimumkan untuk menukar perwakilan var_dump ini kembali kepada tatasusunan PHP yang boleh digunakan.

Penyelesaian:

Walaupun serialisasi dan var_export menawarkan penyelesaian yang sah, cabaran ini mencari pendekatan yang kreatif dan cekap. Satu pendekatan sedemikian melibatkan menukar output var_dump kepada rentetan bersiri dan kemudian menyahsirinya.

<code class="php">function unvar_dump($str) {
    // Add new lines for improved readability
    if (strpos($str, "\n") === false) {
        $str = preg_replace(['#(\[.*?\]=>)#', '#(string\(|int\(|float\(|array\(|NULL|object\(|})#'], "\n\1", $str);
        $str = trim($str);
    }

    // Regular expressions for pattern matching
    $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',
        ';'
    );

    // Convert to serialized string
    $serialized = preg_replace($regex, $replace, $str);

    // Handle string keys
    $func = create_function('$match', 'return "s:".strlen($match[1]).":\"".$match[1]."\"";');
    $serialized = preg_replace_callback('#\s*\["(.*?)"\]\s*=>#', $func, $serialized);

    // Handle objects
    $func = create_function('$match', 'return "O:".strlen($match[1]).":\"".$match[1]."\":".$match[2].":{";');
    $serialized = preg_replace_callback('#object\((.*?)\).*?\((\d+)\)\s*{\s*;#', $func, $serialized);

    // Finalize serialized string
    $serialized = preg_replace(['#};#', '#{;#'], ['}', '{'], $serialized);

    // Unserialize and return the array
    return unserialize($serialized);
}</code>
Salin selepas log masuk

Contoh Penggunaan:

<code class="php">$complex_array = array(
    "foo" => "Foo\"bar\"",
    0 => 4,
    5 => 43.2,
    "af" => array(
        0 => "123",
        1 => (object)[
            "bar" => "bart",
            "foo" => ["re"]
        ],
        2 => NULL
    )
);

$var_dump_output = var_export($complex_array, true);
$reconstructed_array = unvar_dump($var_dump_output);

// Verify if the reconstructed array matches the original
var_dump($complex_array === $reconstructed_array); // Outputs: bool(true)</code>
Salin selepas log masuk

Penyelesaian ini menyediakan praktikal dan kaedah yang dioptimumkan untuk membina semula tatasusunan daripada output var_dump, mempamerkan pendekatan alternatif kepada manipulasi data dalam PHP.

Atas ialah kandungan terperinci Bagaimanakah anda boleh membina semula tatasusunan PHP dengan berkesan daripada output var_dumpnya, memandangkan kekurangan penyelesaian asli 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