0

json_encode を介して渡す配列があります。最初の配列の周りに配列ブラケットをラップしますが、2 番目の配列の周りにオブジェクト エンクロージャ {} をラップし、ネストされた配列に番号を付けます。エラーは発生していませんが、なぜこれが起こっているのか疑問に思いました。

{
"data": {
    "first_array": [
        {
            "meta": {
                "slug": "rank",
                "weight": "100",
                "description": "lorem ipsum",
                "importance": {
                    "value": 2,
                    "max": 5
                }
            },
            "scores": {
                "results": {
                    "slug": "rank",
                    "type": "int",
                    "value": "4"
                }
            }
        },
        {
            "meta": {
                "slug": "rank",
                "weight": "100",
                "description": "lorem ipsum",
                "importance": {
                    "value": 2,
                    "max": 5
                }
            },
            "scores": {
                "results": {
                    "slug": "rank",
                    "type": "int",
                    "value": "4"
                }
            }
        }
    ],
    "second_array": {
        "2": {
            "meta": {
                "slug": "this",
                "weight": "75",
                "description": "lorem ipsum",
                "importance": {
                    "value": 1,
                    "max": 5
                }
            },
            "scores": {
                "results": {
                    "slug": "this",
                    "type": "boolean",
                    "value": 1,
                    "code": 200
                }
            }
        },
        "3": {
            "meta": {
                "slug": "that",
                "weight": "200",
                "description": "lorem ipsum",
                "importance": {
                    "value": 3,
                    "max": 5
                }
            },
            "scores": {
                "results": {
                    "slug": "that",
                    "type": "boolean",
                    "value": 1
                }
            }
        }
    }
}

}

ここに配列のprint_rがあります

    Array
(
    [data] => Array
        (
            [first_array] => Array
                (
                    [0] => Array
                        (
                            [meta] => Array
                                (
                                    [slug] => rank
                                    [weight] => 100
                                    [description] => lorem ipsum
                                    [importance] => Array
                                        (
                                            [value] => 2
                                            [max] => 5
                                        )

                                )

                            [scores] => Array
                                (
                                    [results] => Array
                                        (
                                            [slug] => rank
                                            [type] => int
                                            [value] => 4
                                        )

                                )

                        )
                    [1] => Array
                        (
                            [meta] => Array
                                (
                                    [slug] => rank
                                    [weight] => 100
                                    [description] => lorem ipsum
                                    [importance] => Array
                                        (
                                            [value] => 2
                                            [max] => 5
                                        )

                                )

                            [scores] => Array
                                (
                                    [results] => Array
                                        (
                                            [slug] => rank
                                            [type] => int
                                            [value] => 4
                                        )

                                )

                        )

                )

            [second_array] => Array
                (
                    [2] => Array
                        (
                            [meta] => Array
                                (
                                    [slug] => this
                                    [weight] => 100
                                    [description] => lorem ipsum
                                    [importance] => Array
                                        (
                                            [value] => 2
                                            [max] => 5
                                        )

                                )

                            [scores] => Array
                                (
                                    [results] => Array
                                        (
                                            [slug] => this
                                            [type] => boolean
                                            [value] => 1
                                            [code] => 200
                                        )

                                )

                        )
                    [3] => Array
                        (
                            [meta] => Array
                                (
                                    [slug] => that
                                    [weight] => 100
                                    [description] => lorem ipsum
                                    [importance] => Array
                                        (
                                            [value] => 2
                                            [max] => 5
                                        )

                                )

                            [scores] => Array
                                (
                                    [results] => Array
                                        (
                                            [slug] => that
                                            [type] => boolean
                                            [value] => 1
                                        )

                                )

                        )
                )
        )
)
4

4 に答える 4

3

2 つ目は連想配列(文字列をキーとして持つ) であるためです。JS 配列は、数値インデックスのみを持つことができます。

PHP 5.3 以降、JSON_FORCE_OBJECTjson_encodeでのみオブジェクトを強制的に出力できます。

于 2013-03-07T16:25:58.637 に答える
0

最初のものはキー0から始まるので、標準の数値配列のように見えます。つまりfirst[0]、javascriptでは最初の要素が得られます。

しかし、2番目のものは2から始まり、標準のjavascript配列に入れることはできません。つまり、PHPの$ second [2]は、実際にsecond[0]はjavascriptに含まれます(配列に変換された場合)。

2つの番号システムは互換性がありません。オブジェクトとして保存すると、データに任意の文字列キーを使用できます。(連想配列に似ています-数値配列ではなく、キーとして数値を使用する場合でも。javascript数値配列はキーをスキップできません)

あなたは呼び出すことができます

$array['data']['second_array'] = array_values($array['data']['second_array']); 

2番目の配列の現在のキーを破棄し、新しいキーを取得します。これは0から始まり、変換されると通常のjavascript配列を形成します。

于 2013-03-07T16:26:48.000 に答える
0

あなたのステータスを再現するための単なる例です(そしてそれを説明してみてください)

$a = Array("a","b","c","d");
echo json_encode($a); // ["a","b","c","d"]
unset($a[2]);
echo json_encode($a); // {"0":"a","1":"b","3":"d"}

最初のケースでは、純粋な配列 (数値) があります。したがって、これの json 文字列は配列 rappresentation["a","b","c","d"]です。

ただし、3 番目の要素を設定解除すると、数値配列は連想配列になります (順序がまだ考慮されていないため)。連想配列 (数値インデックスはあるがシーケンシャル インデックスではない) は、単純なオブジェクトのように json で表現されます。

于 2013-03-07T16:37:09.683 に答える
0

これは、first_array が実際には index = 0 で始まる配列であり、連続しているのに対し、second_array は index = 2 で始まるため、関数がインデックス (文字列として) <=> 値の関連付けを使用するために発生する可能性があります。

B.

于 2013-03-07T16:25:43.857 に答える