PHP的可选var_转储,允许限制嵌套数组的深度
我尝试在phpsh的命令行上使用var_dump,以获取有关某个变量的调试信息。但是该变量包含一个嵌套非常深的数据结构。因此,使用默认的var_dump会输出太多的信息 我想限制var_dump输出的深度级别。我发现XDebug的var_dump实现允许深度限制,如下所述:PHP的可选var_转储,允许限制嵌套数组的深度,php,debugging,var-dump,Php,Debugging,Var Dump,我尝试在phpsh的命令行上使用var_dump,以获取有关某个变量的调试信息。但是该变量包含一个嵌套非常深的数据结构。因此,使用默认的var_dump会输出太多的信息 我想限制var_dump输出的深度级别。我发现XDebug的var_dump实现允许深度限制,如下所述: 不幸的是,我也做不到这一点。我还不知道原因。我正在寻找是否有任何替代的var_转储实现可以尝试 以下是此问题的功能: function slice_array_depth($array, $depth = 0) {
不幸的是,我也做不到这一点。我还不知道原因。我正在寻找是否有任何替代的var_转储实现可以尝试 以下是此问题的功能:
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\u dump()
或print\u r()
切片数组:)检查以下内容:
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";
}
}
函数打印\u数组($array,$depth=1,$indentation=0){
if(is_数组($array)){
echo“数组(\n);
foreach($key=>$value的数组){
if(是_数组($value)){
如果($depth,我将插入这个变量转储选项:
显然,默认情况下支持并启用了深度限制。此外,您可以通过在Kint::dump($var);
前面加上+-+Kint::dump($var);
将不会根据深度进行截断。json\u encode采用深度参数。
这样做:
echo'.json_encode($your_array,json_PRETTY_PRINT,$depth)。”;
您尝试过打印吗?它保存的信息较少您在适当的php.ini文件中做了更改吗?有一个php.ini用于CLI配置(即/etc/php5/CLI/php.ini),另一个用于Apache配置(即/etc/php5/Apache/php.ini)。xDebug解决方案确实有效,而且效果很好。您尝试了什么?这是您问题的最佳答案。@igorpov是的,我尝试了print\r
。它也打印了整个对象图。@ivankoni是的,我安装了xDebug并在相应的php.ini文件中进行了更改。我使用了webpartion服务器。我更改了~/webapps//php.ini文件。我添加了行xdebug.var\u display\u max\u depth=1
也可以使用json\u encode.echo@json\u encode($var);它将只打印变量的可读值。我想他要求的是数组值是数组本身,他希望打印它们,以便在一定深度后,打印下一个元素。print\r
将打印数组及其所有深度当$depth=0
和$value
是数组时会发生什么?我想nk它仍然是一个数组,不会被截断。对于$array[$key]所在的数组,您需要一个elseif
='Array at max deth';
必须在那里。您应该传递一个多维数组和要将其切片的深度刚刚选中,您的函数不会对数组进行任何更改。这是因为当$depth
达到0
并且$value
结果是一个数组时,您实际上并没有将其切片,而是只是保持不变。我们需要将$depth-1传递到函数中,而不是将当前范围中的$depth减少1应该是$array[$key]=slice\u array\u depth($value,$depth-1)
谢谢,这解决了我的问题。上面的代码中有一些语法错误。当这些错误被纠正时,函数可以按要求工作。这似乎是一个不错的解决方案,但它删除了太多像对象名这样的信息。因此,不幸的是,它不是很有用。