json_encode は疎配列を JSON オブジェクトとしてエンコードします
疎配列 (つまり、インデックスが欠落している配列) を JSON エンコードする場合、PHP の json_encode 関数は次のようになります。予期しない動作、配列を JSON オブジェクトに変換する配列の代わりに。この動作を理解するために、例を見てみましょう。
$a = array( new stdClass, new stdClass, new stdClass ); $a[0]->abc = '123'; $a[1]->jkl = '234'; $a[2]->nmo = '567'; printf("%s\n", json_encode($a)); unset($a[1]); printf("%s\n", json_encode($a));
出力:
[{ "abc": "123" },{ "jkl": "234" },{ "nmo": "567" }] { "0": { "abc": "123" }, "2": { "nmo": "567" } }
初期エンコードでは、スパース配列がオブジェクトとして有効であるため、json_encode はオブジェクトの配列を生成します。 。ただし、unset でインデックス (1) を削除した後、結果の配列には穴があるため、配列としてエンコードできません。
この問題を解決し、配列が配列としてエンコードされたままであることを確認するには、array_values を使用します。 ($a) エンコード前:
printf("%s\n", json_encode(array_values($a)));
[{ "abc": "123" },{ "nmo": "567" }]
array_values で配列のインデックスを再作成することで、ギャップが削除され、 json_encode を使用して、有効な JSON 配列を正常に生成します。
以上がPHP の「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。