>  기사  >  백엔드 개발  >  PHP의 var_dump 출력에서 ​​배열을 어떻게 다시 만들 수 있습니까?

PHP의 var_dump 출력에서 ​​배열을 어떻게 다시 만들 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-27 03:45:30315검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.