json_encode()でPHPの配列をJSONにする場合に、PHPの配列の内容によってJSONの配列(Array)になるかハッシュ(JSONの場合KEYが文字列のプロパティの集合)になるかを調べてみた。
PHPの連想配列(KEYあり)の場合
$arr = array('foo' => 'a', 'bar' => 'b', 'baz' => 'c');→JSONのハッシュになった。
echo json_encode($arr);
// => {"foo":"a","bar":"b","baz":"c"}
PHPの配列(KEY指定なし=ゼロから始まる連番)の場合
$arr = array('a', 'b', 'c');→JSONの配列になった。
echo json_encode($arr);
// => ["a","b","c"]
PHPの配列を、json_encode()のオプション指定で強制的にハッシュにした場合
$arr = array('a', 'b', 'c');→JSONのハッシュになった。
echo json_encode($arr, JSON_FORCE_OBJECT);
// => {"0":"a","1":"b","2":"c"}
PHPの連想配列で、一部だけKEY指定なしの場合
$arr = array('foo' => 'a', 'b', 'baz' => 'c');→JSONのハッシュになった。
echo json_encode($arr);
// => {"foo":"a","0":"b","baz":"c"}
PHPの配列から最初の要素を消した場合
$arr = array('a', 'b', 'c');→JSONのハッシュになった。
unset($arr[0]);
echo json_encode($arr);
// => {"1":"b","2":"c"}
PHPの配列から
$arr = array('a', 'b', 'c');→JSONのハッシュになった。
unset($arr[1]);
echo json_encode($arr);
// => {"0":"a","2":"c"}
PHPの配列から最後の要素を消した場合
$arr = array('a', 'b', 'c');→JSONの配列になった!
unset($arr[2]);
echo json_encode($arr);
// => ["a","b"]
PHPの連想配列でKEYをゼロから始まる連番で指定した場合
$arr = array(0 => 'a', 1 => 'b', 2 => 'c');→JSONの配列になった。
echo json_encode($arr);
// => ["a","b","c"]
PHPの連想配列でKEYを数値だけど連番じゃないものにした場合
$arr = array(0 => 'a', 1 => 'b', 4 => 'c');→JSONのハッシュになった。
echo json_encode($arr);
// => {"0":"a","1":"b","4":"c"}
結論
json_encode()により配列(Array)になるのは、PHPの(連想)配列のKEYがゼロから始まる連番の場合のみ。
1 件のコメント:
$a = array(1 => 'bar', 0 => 'foo') ; // ハッシュ
sort($a); // 配列
となりましたので、イテレータの持つキーが 0 から始まる連番である必要もありますね。要注意です。
コメントを投稿