ホームページ > バックエンド開発 > PHPチュートリアル > PHP の「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?

PHP の「json_encode」がスパース配列を JSON オブジェクトに変換するのはなぜですか?

Barbara Streisand
リリース: 2024-11-27 08:50:10
オリジナル
453 人が閲覧しました

Why Does PHP's `json_encode` Convert Sparse Arrays to JSON Objects?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート