소개:
종종 간과되기 쉬운 PHP에는 다음과 같은 문제가 있습니다. var_dump 출력에서 배열을 재구성해야 하는 경우가 있습니다. 겉보기에 간단해 보이는 이 작업에는 PHP의 기본 솔루션이 부족하여 개발자들 사이에 창의성이 촉발되었습니다.
문제 설명:
배열이 주어지면 차원에 관계없이 var_dump를 출력합니다. 표현:
<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>
이 과제는 이 var_dump 표현을 다시 사용 가능한 PHP 배열로 변환하는 최적화된 방법을 고안하는 것입니다.
해결책:
직렬화 및 var_export가 유효한 솔루션을 제공하는 반면, 이 과제는 창의적이고 효율적인 접근 방식을 추구합니다. 이러한 접근 방식 중 하나는 var_dump 출력을 직렬화된 문자열로 변환한 후 직렬화 해제하는 것입니다.
<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>
사용 예:
<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>
이 솔루션은 실용적이고 var_dump 출력에서 배열을 재구성하기 위한 최적화된 방법으로, PHP의 데이터 조작에 대한 대체 접근 방식을 보여줍니다.
위 내용은 PHP에 기본 솔루션이 없는 경우 var_dump 출력에서 PHP 배열을 효과적으로 재구성할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!