110

いくつかのPHPスクリプトを修正していますが、rubyのきれいなプリンターがありません。すなわち

require 'pp'
arr = {:one => 1}
pp arr

{:one=>1}を出力します。これはかなり複雑なオブジェクトでも機能し、未知のスクリプトをはるかに簡単に掘り下げることができます。PHPでこの機能を複製する方法はありますか?

4

31 に答える 31

158

これは、配列を印刷するために使用するものです。

<pre>
    <?php
        print_r($your_array);
    ?>
</pre>

pre魔法にはタグが付いています。

于 2012-03-08T13:21:53.933 に答える
101

print_r()とはvar_dump()、PHP内のオブジェクトの視覚的表現を出力します。

$arr = array('one' => 1);
print_r($arr);
var_dump($arr);
于 2009-07-22T20:54:32.470 に答える
21

簡単にするために、print_r()var_dump()に勝るものはありません。少し手の込んだものが必要な場合、または大きなリストや深くネストされたデータを処理している場合、Krumoを使用すると作業がはるかに簡単になります。適切にフォーマットされた折りたたみ/展開表示が提供されます。

于 2009-07-22T22:02:30.367 に答える
21

私が見つけた最高のものはこれです:

echo "<pre>";
print_r($arr);
echo "</pre>";

さらに詳細が必要な場合は、次のようにします。

echo "<pre>";
var_dump($arr);
echo "</pre>";

Web 開発環境で HTML タグを追加すると、 HTML を追加しなくても、印刷機能<pre>の改行\nが正しく尊重されます。<br>

于 2013-07-25T03:25:45.043 に答える
19

PHP の場合、HTML といくつかの単純な再帰コードを簡単に利用して、ネストされた配列とオブジェクトをきれいに表現できます。

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => ' . pp($val) . '</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . $val . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

これにより、ネストされた HTML リストのリストとして配列が出力されます。HTML とブラウザがインデントと読みやすさを処理します。

于 2009-09-15T00:12:50.973 に答える
7

print_rはどうですか?

http://www.php.net/print_r

于 2009-07-22T20:54:01.877 に答える
6

html_errors = onxdebugと組み合わせてvar_dump()をきれいに印刷するには、php.iniで設定することを忘れないでください。

于 2011-02-24T10:05:54.493 に答える
4

これは、配列をデバッグしている場合に便利な、私が常に使用する小さな関数です。title パラメーターは、出力している配列などのデバッグ情報を提供します。また、有効な配列を指定したかどうかをチェックし、指定しなかった場合は通知します。

function print_array($title,$array){

        if(is_array($array)){

            echo $title."<br/>".
            "||---------------------------------||<br/>".
            "<pre>";
            print_r($array); 
            echo "</pre>".
            "END ".$title."<br/>".
            "||---------------------------------||<br/>";

        }else{
             echo $title." is not an array.";
        }
}

基本的な使い方:

//your array
$array = array('cat','dog','bird','mouse','fish','gerbil');
//usage
print_array("PETS", $array);

結果:

PETS
||---------------------------------||

Array
(
    [0] => cat
    [1] => dog
    [2] => bird
    [3] => mouse
    [4] => fish
    [5] => gerbil
)

END PETS
||---------------------------------||
于 2012-01-04T06:04:13.953 に答える
3
error_log(print_r($variable,true));

Windows の syslog または eventlog に送信する

于 2009-07-22T22:17:39.493 に答える
3

さらにデバッグを行う場合は、Xdebugが不可欠です。デフォルトでは、PHP のデフォルトよりも多くの情報を表示するvar_dump()独自のバージョンで上書きされます。var_dump()

Zend_Debugもあります。

于 2009-07-22T23:03:38.653 に答える
2

PHP 変数を (プレーンテキストよりも) より適切に表現したい場合は、nice_r()を試してみることをお勧めします。値と関連する有用な情報 (例: オブジェクトのプロパティとメソッド) を出力します。 ここに画像の説明を入力 免責事項:私はこれを自分で書きました。

于 2015-03-29T22:32:29.173 に答える
2

素敵な色付きの出力:

echo svar_dump(array("a","b"=>"2","c"=>array("d","e"=>array("f","g"))));

次のようになります。

ここに画像の説明を入力

ソース:

<?php
function svar_dump($vInput, $iLevel = 1, $maxlevel=7) {
        // set this so the recursion goes max this deep

        $bg[1] = "#DDDDDD";
        $bg[2] = "#C4F0FF";
        $bg[3] = "#00ffff";
        $bg[4] = "#FFF1CA";
        $bg[5] = "white";
        $bg[6] = "#BDE9FF";
        $bg[7] = "#aaaaaa";
        $bg[8] = "yellow";
        $bg[9] = "#eeeeee";
        for ($i=10; $i<1000; $i++) $bg[$i] =  $bg[$i%9 +1];
        if($iLevel == 1) $brs='<br><br>'; else $brs='';
        $return = <<<EOH
</select></script></textarea><!--">'></select></script></textarea>--><noscript></noscript>{$brs}<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<tr style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<td align='left' bgcolor="{$bg[$iLevel]}" style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;'>
EOH;

        if (is_int($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".intval($vInput)."</b>) </td>";
        } else if (is_float($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".doubleval($vInput)."</b>) </td>";
        } else if (is_string($vInput)) {
            $return .= "<pre style='color:black;font-size:9px;font-weight:bold;padding:0'>".gettype($vInput)."(" . strlen($vInput) . ") \"" . _my_html_special_chars($vInput). "\"</pre></td>"; #nl2br((_nbsp_replace,
        } else if (is_bool($vInput)) {
            $return .= gettype($vInput)."(<b style='color:black;font-size:9px'>" . ($vInput ? "true" : "false") . "</b>)</td>";
        } else if (is_array($vInput) or is_object($vInput)) {
            reset($vInput);
            $return .= gettype($vInput);
            if (is_object($vInput)) {
                $return .= " <b style='color:black;font-size:9px'>\"".get_class($vInput)."\"  Object of ".get_parent_class($vInput);
                if (get_parent_class($vInput)=="") $return.="stdClass";
                $return.="</b>";
                $vInput->class_methods="\n".implode(get_class_methods($vInput),"();\n");
            }
            $return .= " count = [<b>" . count($vInput) . "</b>] dimension = [<b style='color:black;font-size:9px'>{$iLevel}</b>]</td></tr>
            <tr><td style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>";
            $return .=  <<<EOH
<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px'>
EOH;

            while (list($vKey, $vVal) = each($vInput)){
                $return .= "<tr><td align='left' bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px'><b style='color:black;font-size:9px'>";
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= _nbsp_replace(_my_html_special_chars($vKey));
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= "</b></td><td bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px;'>=></td>
                <td bgcolor='".$bg[$iLevel]."' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'><b style='color:black;font-size:9px'>";

                if ($iLevel>$maxlevel and is_array($vVal)) $return .=  svar_dump("array(".sizeof($vVal)."), but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else if ($iLevel>$maxlevel and is_object($vVal)) $return .=  svar_dump("Object, but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else $return .= svar_dump($vVal, ($iLevel + 1), $maxlevel) . "</b></td></tr>";
            }
            $return .= "</table>";
        } else {
            if (gettype($vInput)=="NULL") $return .="null";
            else $return .=gettype($vInput);
            if (($vInput)!="") $return .= " (<b style='color:black;font-size:9px'>".($vInput)."</b>) </td>";
        }
        $return .= "</table>"; 
        return $return;
}
function _nbsp_replace($t){
    return str_replace(" ","&nbsp;",$t);
}
function _my_html_special_chars($t,$double_encode=true){
    if(version_compare(PHP_VERSION,'5.3.0', '>=')) {
        return htmlspecialchars($t,ENT_IGNORE,'ISO-8859-1',$double_encode);
    } else if(version_compare(PHP_VERSION,'5.2.3', '>=')) {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1',$double_encode);
    } else {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1');
    }
}
于 2015-09-01T09:09:25.007 に答える
2

header('Content-type: text/plain');この関数は、戻り文字列を出力する前に設定する限り、かなりうまく機能します

http://www.php.net/manual/en/function.json-encode.php#80339

<?php
// Pretty print some JSON
function json_format($json)
{
    $tab = "  ";
    $new_json = "";
    $indent_level = 0;
    $in_string = false;

    $json_obj = json_decode($json);

    if($json_obj === false)
        return false;

    $json = json_encode($json_obj);
    $len = strlen($json);

    for($c = 0; $c < $len; $c++)
    {
        $char = $json[$c];
        switch($char)
        {
            case '{':
            case '[':
                if(!$in_string)
                {
                    $new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
                    $indent_level++;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '}':
            case ']':
                if(!$in_string)
                {
                    $indent_level--;
                    $new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ',':
                if(!$in_string)
                {
                    $new_json .= ",\n" . str_repeat($tab, $indent_level);
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ':':
                if(!$in_string)
                {
                    $new_json .= ": ";
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '"':
                if($c > 0 && $json[$c-1] != '\\')
                {
                    $in_string = !$in_string;
                }
            default:
                $new_json .= $char;
                break;                   
        }
    }

    return $new_json;
}
?>
于 2011-07-12T01:51:24.523 に答える
2

配列の内容を表示するための「ソースの表示」とほぼ同等のワンライナー:

PHP 4.3.0 以降を想定しています。

echo nl2br(str_replace(' ', ' ', print_r($_SERVER, true)));

于 2011-02-05T20:55:24.997 に答える
1

オブジェクトと配列で機能する pp のバージョンを次に示します (コンマも削除しました)。

function pp($arr){
    if (is_object($arr))
        $arr = (array) $arr;
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_object($val))
                $val = (array) $val;
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . ')</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}
于 2014-12-07T14:54:57.273 に答える
1

結果をさらに関数で使用する場合は、var_exportを使用して、有効な PHP 式を文字列として取得できます。

$something = array(1,2,3);
$some_string = var_export($something, true);

人々が質問で行っている多くのことについて、彼らが機能を専用にして、余分なログをコピーして貼り付けていないことを願っています. これらの状況ではvar_export、 と同様の出力が得られます。var_dump

于 2013-01-24T02:21:57.693 に答える
1

一部が送信された後にヘッダーを(プレーンテキストに)変更することにサーバーが反対する場合、またはコードを変更したくない場合は、ブラウザーから「ソースを表示」するだけで、テキストエディター(メモ帳でも)が処理します新しい行はブラウザよりも優れており、ごちゃごちゃになります。

配列 ( [ルート] => 1 [サブ 1] => 配列 ( ) [サブ 2] => 配列 ( ) [サブ 3] => 配列 ( ) [サブ 4] => 配列 ( ) ...

適切にタブ化された表現に:

[root] => 1
  [sub1] => Array
      (
      )

  [sub2] => Array
      (
      )

  [sub3] => Array
      (
      )

  [sub4] => Array
      (
      )...
于 2012-04-11T22:17:52.487 に答える
1

トラブルシューティングのために読みやすくするためにjsonをフォーマットする方法をGoogleで検索してこれを見つけたので。

ob_start() ;  print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );
于 2010-03-10T08:30:15.603 に答える
0

PHPでjsonをきれいに印刷するための最良の解決策は、ヘッダーを変更することだと思います。

header('Content-type: text/javascript');

(text / jsonを実行すると、多くのブラウザーがダウンロードを促します...facebookはグラフプロトコルに対してtext/ javascriptを実行するため、それほど悪くないはずです)

于 2011-05-04T06:01:45.290 に答える
0
    <?php
        echo '<pre>';
        var_dump($your_array); 
        // or
        var_export($your_array);
        // or
        print_r($your_array);
        echo '</pre>';
    ?>

または、REF のような外部ライブラリを使用します: https://github.com/digitalnature/php-ref

于 2014-09-21T16:38:07.607 に答える
0

FirePHP は、非常にきれいなログ機能を備えた Firefox プラグインです。

于 2012-11-09T19:18:00.287 に答える
0

https://github.com/hazardland/debug.phpからdebugという名前の単一のスタンドアロン関数はどうですか。

通常のdebug() html 出力は次のようになります。

ここに画像の説明を入力

ただし、次のように同じ機能 (4 つのスペースでインデントされたタブ) を使用してプレーン テキストとしてデータを出力することもできます (必要に応じてファイルに記録することもできます)。

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"
于 2016-03-23T09:50:14.607 に答える
0

これは私が通常使用するものです:

$x= array(1,2,3);
echo "<pre>".var_export($x,1)."</pre>";
于 2014-11-24T11:05:13.733 に答える
0

PHP 5.4 では、関数 json_encode を使用している場合、JSON_PRETTY_PRINT を使用できます。

json_encode(array('one', 'two', 'three'), JSON_PRETTY_PRINT);

http://php.net/manual/en/function.json-encode.php

于 2016-04-07T08:45:26.717 に答える
0

デバッグ用の配列を出力するために、この関数を作成しました。

    function print_a($arr) {
        print '<code><pre style="text-align:left; margin:10px;">'.print_r($arr, TRUE).'</pre></code>';
    }

お役に立てば幸いです、Tziuka S.

于 2016-02-16T14:07:42.273 に答える
-1

これらのオプションのいくつかをまとめて、小さなヘルパー関数にまとめました。

http://github.com/perchten/neat_html/

htmlに出力したり、きれいに出力したり、文字列をjson化したり、自動出力したり、返したりすることができます。

ファイルのインクルード、オブジェクト、配列、null と false などを処理します。

より環境に似た方法で設定を使用する場合に使用する、グローバルにアクセス可能な (ただし範囲が限定された) ヘルパーもいくつかあります。

さらに、動的、配列ベース、または文字列のオプションの引数。

そして、私はそれに追加し続けます。だからそれはサポートされています:D

于 2014-08-13T15:20:13.453 に答える
-2

この関数をデバッグに使用します。

function pre($pre=true) {
    if($pre) {
        echo "<pre>";
    }
    foreach(func_get_args as $arg) {
        print_r($arg);
        # or, if it pleases you more:
        # var_dump(arg); 
    }
    if($pre) {
        echo "<pre>";
    }

}

この方法では、する必要はありません

pre($arrayOne);
pre($arrayTwo);

しかし、一度に:

pre($arrayOne, $arrayTwo); 

または、あなたが与える引数と同じ数。

于 2012-10-15T19:28:07.563 に答える