array と json_encode のメモ

次の2つのJSONがある。

{"0":{"a":1,"b":2},"1":{"a":1,"b":2},"3":{"a":1,"b":2}}
[{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2}]

後者を期待していて、前者に遭遇して困ったのでメモ。

PHPでarrayから要素を削除を参考に、unsetで要素を削除してjson_encodeをしたら前者のJSONが生成されて困った。

unsetでarray要素で歯抜けができた状態で、json_encodeをするとJSONが配列になり、歯抜けを解消すると、オブジェクトになる。

$array = array();

って配列があって、その配列にインスタンスを格納してあるとして、次の処理をする。

json_encode($array);
unset($array[2]);
json_encode($array);
array_values($array);
json_encode($array);

と3つJSONを出力すると、次のようになる。

[{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2}]
{"0":{"a":1,"b":2},"1":{"a":1,"b":2},"3":{"a":1,"b":2}}
[{"a":1,"b":2},{"a":1,"b":2},{"a":1,"b":2}]

歯抜けの配列と、連番の配列だとjson_encodeの結果に差がでることになかなか気づかなくて時間を無駄にした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です