PHPでデバッグやフレームワークで渡される配列を展開してログに吐きたい時のメモ。
要するにRubyとかのArray.to_sみたいな感じで展開してログに吐き出したいわけです。
PHPでは配列をそのままerror_logに渡しても上手く書き出せません。
<?php $arr = ["Akatsuki", "Hibiki", "Ikazuchi", "Inazuma"]; error_log($arr . "\n", 3, $logfile);
↓ログファイルの出力結果
Array
print_r で配列を展開して書き出せる
print_rの第二引数にtrueを渡すと文字列で結果が返ってくるっぽいので、これを利用してログに配列を展開して吐き出すことができます。
<?php $arr = ["Akatsuki", "Hibiki", "Ikazuchi", "Inazuma"]; error_log(print_r($arr, true), 3, $logfile);
↓ログファイルの出力結果
Array
(
[0] => Akatsuki
[1] => Hibiki
[2] => Ikazuchi
[3] => Inazuma
)
オブジェクト(連想配列)でも綺麗にログに書き出すことができました。
<?php $arr = [ "type" => "destroyer", "class" => "Type III (Akatsuki)", "ships" => ["Akatuki", "Hibiki", "Ikazuchi", "Inazuma"] ]; error_log(print_r($arr, true), 3, $logfile);
↓ログファイルの出力結果
Array
(
[type] => destroyer
[class] => Type III (Akatsuki)
[ships] => Array
(
[0] => Akatuki
[1] => Hibiki
[2] => Ikazuchi
[3] => Inazuma
)
)
note.
配列を文字列に結合するimplode()関数ってのもありますが、これだとオブジェクト(連想配列)の時にキーは無視されて値だけで結合されてしまうので、タダの配列だと判っている時以外はダメかなーと思いました。
<?php
$arr = [
"type" => "destroyer",
"class" => "Type III (Akatsuki)",
"ships" => ["Akatuki", "Hibiki", "Ikazuchi", "Inazuma"]
];
error_log(implode("\n",$arr), 3, $logfile);
↓ログファイルの出力結果
destroyer Type III (Akatsuki) Array
という事で、ログへの吐き出しはprint_r($array, true)とするのが便利そうです。
ログ以前に行末に;つけ忘れてエラーになりまくるのでPHP辛い...
[参考]
- PHP: print_r - Manual
- PHP: implode - Manual
- Array to String PHP? - Stack Overflow
- phpのエラーログに、array配列の中身をきれいに吐く。 - カサヒラボ

人生は1冊のノートにまとめなさい―体験を自分化する「100円ノート」ライフログ
- 作者: 奥野宣之
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2010/11/27
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 184回
- この商品を含むブログ (55件) を見る