ホームページ >バックエンド開発 >PHPチュートリアル >PHP で var_dump 出力から配列を再作成するにはどうすればよいですか?

PHP で var_dump 出力から配列を再作成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 03:45:30398ブラウズ

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

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

**Tested on Complex Structures**

以上がPHP で var_dump 出力から配列を再作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。