Chonaso's Commentary

InternetやIT技術などについて知ったこと、試したこと、考えたことを書いていきます。

PHPの配列とハッシュ

これは当時の憤りから漏れ出たtweetですが、PHPあるあるの一つなんでしょうけどこれにはクラッと来ました。

実際気をつけないとハマることもあるでしょう。


こういうJSONを出力する必要があったんですが、

{ "0": 1, "1": 5, "2": 2}

こんなコードを書くと、

$json = json_encode( [ 0=>1, 1=>5, 2=>2 ] );

$json の中身はこうなります。

[1, 5, 2]

こう書くと?

$json = json_encode( [ 1=>1, 2=>5, 3=>2 ] );

$json の中身はこう。

{ "1":1, "2": 5, "3": 2 }

つまりはハッシュキーがゼロ始まりだと配列になってしまうわけですが、 この辺はPHPマニュアルには

PHP の配列は、実際には順番付けられたマップです。マップは型の一種で、 値をキーに関連付けます。 この型は、さまざまな使い道にあわせて最適化されます。 配列としてだけでなく、リスト (ベクター)、 ハッシュテーブル (マップの実装の一つ)、辞書、コレクション、スタック、 キュー等として使用することが可能です。 PHP の配列には他の PHP 配列を値として保持することができるため、 非常に簡単にツリー構造を表現することが可能です。

などと自慢気に書いてあります。

ちなみにこう書くと

$json = json_encode( [ 1=>5, 2=>2, 0=>1 ] );

$json の中身はもちろんこう。

{ "1": 5, "2": 2, "0":1 }

これは誰がうれしいんでしょうねぇ…

json_encodeに配列をつっこんでも0始まりのハッシュで出す方法があった気がするんですが失念したので思い出したら追記します...