I отвечал на этот вопрос в Perl раньше - я думаю, я мог бы просто перенести основы ответа на PHP:
function dump_array_recursive ( $prefix, $var ) {
if ( is_array( $var ) && !empty( $var ) ) {
foreach ($var as $key => $val) {
$prefix_key = $prefix . "[" . var_export( $key, true ) . "]";
dump_array_recursive( $prefix_key, $val );
}
} else {
echo "$prefix = " . var_export( $var, true ) . ";\n";
}
}
// example call:
dump_array_recursive( '$foo', $foo );
Это немного проще, чем версия Perl, поскольку PHP имеет только один тип массива и не имеет скалярных ссылок, о которых нужно беспокоиться.Я также решил не пытаться собирать выходные данные, а просто использовал echo
;вы можете заменить его на fwrite()
, если хотите, или просто использовать буферизацию вывода, чтобы перехватить результат в строке.
Ps.Обратите внимание, что, хотя выходные данные этой функции обычно содержат одну строку для каждого значения, это не гарантируется: выходные данные var_export()
могут содержать символы новой строки, которые будут переданы в выходные данные.Два случая, которые я обнаружил, чтобы вызвать такое поведение, включают ключи массива с символами новой строки в них и пустые массивы, которые по некоторым причинам экспортируются как "array (\n)"
вместо просто "array()"
.