PHP 的替代 var_dump 允许限制嵌套数组的深度
Posted
技术标签:
【中文标题】PHP 的替代 var_dump 允许限制嵌套数组的深度【英文标题】:Alternative var_dump for PHP that allows limiting depth of nested arrays 【发布时间】:2012-11-03 23:13:15 【问题描述】:我尝试在 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 实现可以尝试。
【问题讨论】:
你试过print_r吗?它保留的信息更少 您是否对适当的 php.ini 文件进行了更改? php.ini 用于 CLI 配置(即 /etc/php5/cli/php.ini),另一个用于 Apache 配置(即 /etc/php5/apache/php.ini)。 xDebug 解决方案确实有效,而且效果很好。你尝试了什么?这是您问题的最佳答案。 @IgorPopov 是的,我试过print_r
。它也打印整个对象图。 @ivankoni 是的,我安装了 xdebug 并在适当的 php.ini 文件中进行了更改。我使用网络派服务器。我更改了 ~/webapps//php.ini 文件。我添加了xdebug.var_display_max_depth=1
你也可以使用json_encode。回声@json_encode($var);它只会打印变量的可读值
【参考方案1】:
json_encode 采用深度参数。 这样做:
echo '<pre>' . json_encode($your_array, JSON_PRETTY_PRINT, $depth) . '</pre>';
【讨论】:
这似乎是一个不错的解决方案,但它剥离了太多信息,例如对象名称。因此,不幸的是,它不是很有用。【参考方案2】:这里是这个问题的函数:
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()
切片数组:)
【讨论】:
我认为他要问的是数组值是数组本身,他想打印它们,以便在一定深度后打印下一个元素。print_r
将打印数组的所有深度
当$depth=0
和$value
是一个数组时会发生什么?我认为它仍然是一个数组并且没有被切断。您将需要一个elseif
,其中必须有$array[$key]='Array at max deth';
。
你应该传递一个多维数组和你想要切片的深度
刚刚检查过,您的函数不会对数组进行任何更改。那是因为当$depth
达到0
并且$value
原来是一个数组时,您实际上并没有将它切掉,它只是保持不变。
我们需要将 $depth-1 传递给函数而不是在当前范围内将 $depth 减 1 应该是$array[$key] = slice_array_depth($value, $depth-1);
【参考方案3】:
检查一下:
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 <= 0)
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";
【讨论】:
谢谢,这解决了我的问题。上面的代码中有一些语法错误。更正后,该功能将按要求工作。以上是关于PHP 的替代 var_dump 允许限制嵌套数组的深度的主要内容,如果未能解决你的问题,请参考以下文章
PHP 中更漂亮/信息更丰富的 Var_dump 替代方案? [关闭]