回答:
両方ともprint_r()
、var_dump()
PHP内のオブジェクトの視覚的表現を出力します。
$arr = array('one' => 1);
print_r($arr);
var_dump($arr);
print_r()
自動的に出力し、何も返さない(2番目のパラメーターがでない限りtrue
)ので、別の文字列に連結することはできません。代わりに、次のコマンドを使用します。function pr($var) { print '<pre>'; print_r($var); print '</pre>'; }
これは私の配列を出力するために使用するものです:
<pre>
<?php
print_r($your_array);
?>
</pre>
魔法はpre
タグに付属しています。
var_dump
ためのものよりもはるかに優れていvar_dump
ます...
print_r
: $formatted = print_r($array, true); print "<pre>" . htmlspecialchars($formatted, ENT_QUOTES, 'UTF-8', true) . "</pre>";
簡単にするために、print_r()とvar_dump()を使用することはできません。もう少し手の込んだものが必要な場合や、大きなリストや深くネストされたデータを処理している場合、Krumoを使用すると、作業がはるかに簡単になります。
私が見つけた最高のものはこれです:
echo "<pre>";
print_r($arr);
echo "</pre>";
さらに詳しく知りたい場合:
echo "<pre>";
var_dump($arr);
echo "</pre>";
<pre>
Web開発環境でHTMLタグを追加すると、HTML \n
を追加しなくても、印刷機能の改行が正しく反映されます。<br>
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とブラウザがインデントを処理して読みやすくします。
print_rはどうですか?
これを行う最良の方法は
echo "<pre>".print_r($array,true)."</pre>";
例:
$array=array("foo"=>"999","bar"=>"888","poo"=>array("x"=>"111","y"=>"222","z"=>"333"));
echo "<pre>".print_r($array,true)."</pre>";
結果:
配列
(
[foo] => 999
[bar] => 888
[poo] =>配列
(
[x] => 111
[y] => 222
[z] => 333
)
)
print_rの詳細をご覧ください。
ドキュメントのprint_r "true"の2番目のパラメータについて:
このパラメーターがTRUEに設定されている場合、print_r()は情報を印刷するのではなく返します。
これは、配列をデバッグする場合に便利な小さな関数です。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
||---------------------------------||
さらにデバッグを行う場合は、Xdebugが不可欠です。デフォルトでは、PHPのデフォルトよりも多くの情報を表示するvar_dump()
独自のバージョンで上書きされますvar_dump()
。
Zend_Debugもあります。
print_rコマンドで「コンマtrue」を実行していると誰も言っていなかったので、提供されているすべてのフープやマルチメッシュのようなソリューションを経由しなくても、htmlをインラインで使用できます。
print "session: <br><pre>".print_r($_SESSION, true)."</pre><BR>";
htmlspecialchars()
回避する必要がありprint_r()
ます。
この関数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;
}
?>
素敵な色の出力:
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(" "," ",$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');
}
}
私はこれをグーグル検索して見つけたので、トラブルシューティングのためにjsonをより読みやすくする方法をフォーマットする方法を探しました。
ob_start() ; print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );
サーバーがオブジェクトの送信後にヘッダーを(プレーンテキストに)変更する場合、またはコードを変更したくない場合は、ブラウザーから「ソースを表示」 -テキストエディター(メモ帳でも)が処理されます新しい行はブラウザよりも優れており、ごちゃごちゃした混乱を引き起こします:
配列([root] => 1 [sub1] =>配列()[sub2] =>配列()[sub3] =>配列()[sub4] =>配列()...
適切にタブ化された表現に:
[root] => 1
[sub1] => Array
(
)
[sub2] => Array
(
)
[sub3] => Array
(
)
[sub4] => Array
(
)...
結果を他の関数で使用する場合は、var_exportを使用して、有効なPHP式を文字列として取得できます。
$something = array(1,2,3);
$some_string = var_export($something, true);
人々が彼らの質問でしていることの多くのために、私は彼らが機能を捧げてきて、余分なロギングをコピーして貼り付けないことを望んでいます。これらの状況var_export
と同様の出力を実現しvar_dump
ます。
これは、オブジェクトと配列の両方で機能する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;
}
次に、print_rのオーバーヘッドのない簡単なダンプを示します。
function pretty($arr, $level=0){
$tabs = "";
for($i=0;$i<$level; $i++){
$tabs .= " ";
}
foreach($arr as $key=>$val){
if( is_array($val) ) {
print ($tabs . $key . " : " . "\n");
pretty($val, $level + 1);
} else {
if($val && $val !== 0){
print ($tabs . $key . " : " . $val . "\n");
}
}
}
}
// Example:
$item["A"] = array("a", "b", "c");
$item["B"] = array("a", "b", "c");
$item["C"] = array("a", "b", "c");
pretty($item);
// -------------
// yields
// -------------
// A :
// 0 : a
// 1 : b
// 2 : c
// B :
// 0 : a
// 1 : b
// 2 : c
// C :
// 0 : a
// 1 : b
// 2 : c
<?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
@stephenの答えを拡張して、表示用にいくつかの非常に小さな調整を追加しました。
function pp($arr){
$retStr = '<ul>';
if (is_array($arr)){
foreach ($arr as $key=>$val){
if (is_array($val)){
$retStr .= '<li>' . $key . ' => array(' . pp($val) . '),</li>';
}else{
$retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . ',</li>';
}
}
}
$retStr .= '</ul>';
return $retStr;
}
次のように多次元配列をフォーマットします:
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"
PHP 5.4では、json_encode関数を使用している場合、JSON_PRETTY_PRINTを使用できます。
json_encode(array('one', 'two', 'three'), JSON_PRETTY_PRINT);
私はこれらのオプションのいくつかをまとめて、ほんの少しのヘルパー関数に入れました
http://github.com/perchten/neat_html/
htmlに出力してきれいに出力し、文字列をjsonifyしたり、自動出力したり、リターンしたりできます。
ファイルインクルード、オブジェクト、配列、nullとfalseなどを処理します。
より環境に似た方法で設定を使用する場合に、グローバルにアクセスできる(ただしスコープの広い)ヘルパーもいくつかあります
さらに、動的な配列ベースまたは文字列のオプション引数。
そして、私はそれに追加し続けます。だからそれはサポートされています:D