これは当時の憤りから漏れ出たtweetですが、PHPあるあるの一つなんでしょうけどこれにはクラッと来ました。
実際気をつけないとハマることもあるでしょう。
これが通るPHPはやっぱクソだわ。 pic.twitter.com/TnFvZDcclR
— ちょなそ (@chonaso) 2018年1月25日
こういう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始まりのハッシュで出す方法があった気がするんですが失念したので思い出したら追記します...