我尝试在phpsh的命令行上使用var_dump,以获取有关某些变量的调试信息。但该变量包含一个非常深层嵌套的数据结构。因此,使用默认的var_dump输出的信息太多。
我想限制var_dump输出的深度级别。我发现XDebug的var_dump实现允许深度限制,如下所述:http://www.giorgiosironi.com/2009/07/how-to-stop-getting-megabytes-of-text.html
不幸的是,我无法做到这一点。我还不知道原因。我正在寻找是否有任何替代var_dump实现尝试。
答案 0 :(得分:5)
以下是此问题的功能:
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()
:)
答案 1 :(得分:3)
我只想插入这个var_dump替代方案:
https://github.com/raveren/kint
显然,默认情况下支持并启用深度限制。此外,您可以通过在Kint::dump($var);
前加上{ - +Kint::dump($var);
作为前缀来克服它,不会根据深度进行截断。
答案 2 :(得分:3)
json_encode采用深度参数。 这样做:
echo '<pre>' . json_encode($your_array, JSON_PRETTY_PRINT, $depth) . '</pre>';
答案 3 :(得分:1)
检查一下:
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";
}
}