保守しているサーバーの PHP は、なんとバージョン 5.2.2 という生きる化石のようなシロモノでした。
一応 json_encode 関数はあるのですが、JSON_PRITTY_PRINT や JSON_UNESCAPED_UNICODE オプションが使えないため、とても人間が読みやすいものは出力できません。
じゃあ、どうしようか?
まぁ1時間ぐらいで自作出来るんじゃないの?
と、作ったわずか40行程の関数です。
よかったら使って下さい。
function json_print( $data, $indent=0, $next='' ) { if ( ! is_array( $data ) ) { if ( is_bool( $data ) ) { printf( "%s%s\n", $data ? 'true': 'false', $next ); return; } if ( is_numeric( $data ) ) { printf( "%s%s\n", $data, $next ); return; } printf( "\"%s\"%s\n", preg_replace( '/\\n/', '\\n', preg_replace( '/"/', '\\"', $data ) ), $next ); return; } if ( array_values( $data ) === $data ) { printf( "[\n" ); for ( $n = 0; $n < count( $data ); $n++ ) { printf( str_repeat( ' ', ( $indent + 1 ) * 4 ) ); json_print( $val, $indent + 1, ( $n == ( count( $data ) - 1 ) ) ? '' : ',' ); } printf( "%s]%s\n", str_repeat( ' ', $indent * 4 ), $next ); return; } printf( "{\n", str_repeat( ' ', $indent * 4 ) ); $keys = array_keys( $data ); for ( $n = 0; $n < count( $keys ); $n++ ) { printf( "%s\"%s\" : ", str_repeat( ' ', ( $indent + 1 ) * 4 ), $keys[ $n ] ); json_print( $data[ $keys[ $n ] ], $indent + 1, ( $n == ( count( $keys ) - 1 ) ) ? '' : ',' ); } printf( "%s}%s\n", str_repeat( ' ', $indent * 4 ), $next ); }
使い方はこれだけです。
json_print( $data );