配列を再帰的にHTMLに出力するデバッグ関数(php)
phpにはprint_r()という再帰的に配列やクラス変数を再帰的に出力してくれる関数が存在する。ただこれだとHTMLに出力した場合、改行やインデントが無くなっているため分かり難い。HTML出力用に配列の中身を整形して出力してくれる関数を作成。
まっ、自分用の簡単なデバッグ関数です。。。(汗
パラメータ説明
- $data: 出力したい数値や文字列、配列を渡します。
- $entitieflg: HTMLエンティティ化して出力したい場合にはtrue、そうじゃない場合、falseを渡します。
- $quote_style: htmlentities関数のquote_styleパラメータを参照してください。エンティティ化しない場合は気にする必要がありません。
- $charset: htmlentities関数のcharsetパラメータを参照してください。エンティティ化しない場合は気にする必要がありません。
- $nest: 指定する必要がありません。デフォルトのまま使用してください。
ソースコード
配列を再帰的にHTMLに出力する関数であるmyPrint_rのソースコードです。
function myPrint_r($data, $entitieflg=false, $quote_style=ENT_QUOTES, $charset='UTF-8', $nest=0)
{
if ($nest===0) echo '<pre>';
if (is_array($data)) {
foreach ($data as $key => $val) {
if (is_array($val)) {
ehe(printTab($nest) . "'" . $key . "'\n", $entitieflg, $quote_style, $charset);
myPrint_r($val, $entitieflg, $quote_style, $charset, $nest+1);
} else {
ehe(printTab($nest) . "'" . $key . "'=>'" . $val . "'\n", $entitieflg, $quote_style, $charset);
}
}
} else {
ehe(printTab($nest) . $data."\n", $entitieflg, $quote_style, $charset);
}
if ($nest===0) echo '</pre>';
}
function ehe($str, $entitieflg=false, $quote_style=ENT_QUOTES, $charset='UTF-8')
{
if ($entitieflg) {
echo htmlentities($str,$quote_style,$charset);
} else {
echo $str;
}
}
function printTab($nest)
{
for ($i = 0; $i < $nest; $i++) {
echo "\t";
}
}
テストコード
//変数をセット $data = array( 'key1' => "value1", 'key2' => "value2", 'key3' => "value3", 'key4' => array( 'key4-1' => '<b>value4-1</b>', 'key4-2' => '<font size="5">value4-2</font>', 'key4-3' => '<i>value4-3</i>', ) ); //出力 myPrint_r($data,true);
テストコードの出力結果
'key1'=>'value1' 'key2'=>'value2' 'key3'=>'value3' 'key4' 'key4-1'=>'<b>value4-1</b>' 'key4-2'=>'<font size="5">value4-2</font>' 'key4-3'=>'<i>value4-3</i>'
最後に
ちょいデバッグするのに書き換えたのでついでにブログに載せてみた。
あと久しぶりにprint_r関数の仕様を見ると第二引数で変数に落とせるんですね。。。気づいてなかった。。。(汗
あわせて読む
コメント投稿