首頁  >  文章  >  後端開發  >  如何從 PHP 中的 var_dump 輸出重新建立數組?

如何從 PHP 中的 var_dump 輸出重新建立數組?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-27 03:45:30322瀏覽

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

從var_dump 輸出中恢復數組資料

而var_export 和serialize 分別提供了方便的解決方案,用於將數組轉換為人類可讀的字串並重建它們,它們不足以應對此程式碼挑戰。這裡的目標是探索一種最佳化且創造性的方法來從 var_dump 的輸出中提取數組結構。

用於數組提取的自定義函數

解決方案涉及轉換var_dump 輸出轉換為序列化字串,然後可以將其反序列化以重新建立原始數組。為此,使用了unvar_dump() 函數:

程式碼:

<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));

以上是如何從 PHP 中的 var_dump 輸出重新建立數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn