9

いくつかの変数に関するデバッグ情報を取得するために、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実装があるかどうかを探しています。

4

3 に答える 3

8

json_encodeはdepth引数を取ります。これを行う:

echo '<pre>' . json_encode($your_array, JSON_PRETTY_PRINT, $depth) . '</pre>';

于 2017-09-06T06:12:16.390 に答える
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():)

于 2012-11-15T10:59:33.417 に答える
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 <= 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";
    }
}
于 2012-11-15T11:23:39.157 に答える