2010年6月15日火曜日

PHPの json_encode()で配列になるかハッシュになるか

json_encode()でPHPの配列をJSONにする場合に、PHPの配列の内容によってJSONの配列(Array)になるかハッシュ(JSONの場合KEYが文字列のプロパティの集合)になるかを調べてみた。


PHPの連想配列(KEYあり)の場合

$arr = array('foo' => 'a', 'bar' => 'b', 'baz' => 'c');
echo json_encode($arr);
// => {"foo":"a","bar":"b","baz":"c"}
→JSONのハッシュになった。


PHPの配列(KEY指定なし=ゼロから始まる連番)の場合
$arr = array('a', 'b', 'c');
echo json_encode($arr);
// => ["a","b","c"]
→JSONの配列になった。


PHPの配列を、json_encode()のオプション指定で強制的にハッシュにした場合
$arr = array('a', 'b', 'c');
echo json_encode($arr, JSON_FORCE_OBJECT);
// => {"0":"a","1":"b","2":"c"}
→JSONのハッシュになった。


PHPの連想配列で、一部だけKEY指定なしの場合
$arr = array('foo' => 'a', 'b', 'baz' => 'c');
echo json_encode($arr);
// => {"foo":"a","0":"b","baz":"c"}
→JSONのハッシュになった。


PHPの配列から最初の要素を消した場合
$arr = array('a', 'b', 'c');
unset($arr[0]);
echo json_encode($arr);
// => {"1":"b","2":"c"}
→JSONのハッシュになった。


PHPの配列から最初 途中の要素を消した場合
$arr = array('a', 'b', 'c');
unset($arr[1]);
echo json_encode($arr);
// => {"0":"a","2":"c"}
→JSONのハッシュになった。


PHPの配列から最後の要素を消した場合
$arr = array('a', 'b', 'c');
unset($arr[2]);
echo json_encode($arr);
// => ["a","b"]
→JSONの配列になった!


PHPの連想配列でKEYをゼロから始まる連番で指定した場合
$arr = array(0 => 'a', 1 => 'b', 2 => 'c');
echo json_encode($arr);
// => ["a","b","c"]
→JSONの配列になった。


PHPの連想配列でKEYを数値だけど連番じゃないものにした場合
$arr = array(0 => 'a', 1 => 'b', 4 => 'c');
echo json_encode($arr);
// => {"0":"a","1":"b","4":"c"}
→JSONのハッシュになった。



結論
json_encode()により配列(Array)になるのは、PHPの(連想)配列のKEYがゼロから始まる連番の場合のみ

1 件のコメント:

匿名 さんのコメント...

$a = array(1 => 'bar', 0 => 'foo') ; // ハッシュ
sort($a); // 配列

となりましたので、イテレータの持つキーが 0 から始まる連番である必要もありますね。要注意です。

ブログ アーカイブ

tags