Я пытаюсь использовать var_dump в командной строке с phpsh, чтобы получить отладочную информацию о некоторой переменной. Но переменная содержит очень глубоко вложенную структуру данных. Таким образом, использование var_dump по умолчанию выводит слишком много информации.
Я хочу ограничить уровень глубины вывода var_dump. Я обнаружил, что реализация var_dump XDebug позволяет ограничивать глубину, как описано здесь: http://www.giorgiosironi.com/2009/07/how-to-stop-getting-megabytes-of-text.html
К сожалению, я тоже не мог сделать эту работу. Я еще не знаю причину этого. Я ищу, если есть альтернативные варианты реализации var_dump.
Проверь это :
function print_array($array,$depth=1,$indentation=0){ if (is_array($array)){ echo "Array(\n"; foreach ($array as $key=>$value){ if(is_array($value)){ if($depth){ echo "max depth reached."; } else{ for($i=0;$i<$indentation;$i++){ echo " "; } echo $key."=Array("; print_array($value,$depth-1,$indentation+1); for($i=0;$i<$indentation;$i++){ echo " "; } echo ");"; } } else{ for($i=0;$i<$indentation;$i++){ echo " "; } echo $key."=>".$value."\n"; } } echo ");\n"; } else{ echo "It is not an array\n"; } }
Вот функция для этой проблемы:
function slice_array_depth($array, $depth = 0) { foreach ($array as $key => $value) { if (is_array($value)) { if ($depth > 0) { $array[$key] = slice_array_depth($value, $depth - 1); } else { unset($array[$key]); } } } return $array; }
сfunction slice_array_depth($array, $depth = 0) { foreach ($array as $key => $value) { if (is_array($value)) { if ($depth > 0) { $array[$key] = slice_array_depth($value, $depth - 1); } else { unset($array[$key]); } } } return $array; }
Используйте эту функцию, чтобы нарезать массив на необходимую глубину, чем просто var_dump()
или print_r()
нарезанный массив 🙂
Я просто подключу эту альтернативу var_dump:
https://github.com/raveren/kint
очевидно, что ограничение по глубине поддерживается и включено по умолчанию. Вы можете, кроме того, преодолеть его на лету, префикс Kint::dump($var);
с + + +Kint::dump($var);
не будет усекать по глубине.
json_encode принимает аргумент глубины. Сделай это:
echo '<pre>' . json_encode($your_array, JSON_PRETTY_PRINT, $depth) . '</pre>';