PHP的可选var_转储,允许限制嵌套数组的深度

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) {

我尝试在phpsh的命令行上使用var_dump,以获取有关某个变量的调试信息。但是该变量包含一个嵌套非常深的数据结构。因此,使用默认的var_dump会输出太多的信息

我想限制var_dump输出的深度级别。我发现XDebug的var_dump实现允许深度限制,如下所述:


不幸的是,我也做不到这一点。我还不知道原因。我正在寻找是否有任何替代的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 "&nbsp;&nbsp;&nbsp;&nbsp;";
                    }
                    echo $key."=Array(";
                    print_array($value,$depth-1,$indentation+1);
                    for($i=0;$i<$indentation;$i++){
                        echo "&nbsp;&nbsp;&nbsp;&nbsp;";
                    }
                    echo ");";
                }
            }
            else{
                for($i=0;$i<$indentation;$i++){
                    echo "&nbsp;&nbsp;&nbsp;&nbsp;";
                }
                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)
谢谢,这解决了我的问题。上面的代码中有一些语法错误。当这些错误被纠正时,函数可以按要求工作。这似乎是一个不错的解决方案,但它删除了太多像对象名这样的信息。因此,不幸的是,它不是很有用。