從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中文網其他相關文章!