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件) を見る