129

PHPに次の配列があります。

Array
(
    [0] => Array
        (
            [id] => 0
            [name] => name1
            [short_name] => n1
        )

    [2] => Array
        (
            [id] => 2
            [name] => name2
            [short_name] => n2
        )
)

JSON 配列として JSON エンコードし、次のような文字列を生成します。

[  
    {  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    {  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
]

しかし、json_encodeこの配列を呼び出すと、次のようになります。

{  
    "0":{  
        "id":0,
        "name":"name1",
        "short_name":"n1"
    },
    "2":{  
        "id":2,
        "name":"name2",
        "short_name":"n2"
    }
}

配列ではなくオブジェクトです。

json_encode代わりに、配列を配列としてエンコードするにはどうすればよいですか?

4

4 に答える 4

217

RFC 8259 The JavaScript Object Notation (JSON) Data Interchange Format の配列を参照してください。

配列構造は、0 個以上の値 (または要素) を囲む角括弧として表されます。要素はコンマで区切られます。

配列 = 開始配列 [値 *( 値区切り値 ) ] 配列終了

配列がシーケンシャルではないため、この動作を観察しています-キー02がありますが、キーとしてはありません1

数値インデックスだけでは十分ではありません。json_encodePHP配列がシーケンシャルである場合、つまり、キーが0、1、2、3、...の場合にのみ、PHP配列をJSON配列としてエンコードします。

array_values関数を使用して配列を順番に再インデックスし、必要な動作を得ることができます。たとえば、次のコードはユース ケースで正常に動作します。

echo json_encode(array_values($input)).
于 2013-09-24T09:18:41.243 に答える
75

ArrayinJSONはインデックス付き配列のみであるため、取得しようとしている構造は有効な Json/Javascript ではありません。

PHP 連想配列は JSON のオブジェクトであるため、インデックスが必要でない限り、そのような変換を行うことはできません。

そのような構造を取得したい場合は、次のことができます。

$indexedOnly = array();

foreach ($associative as $row) {
    $indexedOnly[] = array_values($row);
}

json_encode($indexedOnly);

次のようなものを返します。

[
     [0, "name1", "n1"],
     [1, "name2", "n2"],
]
于 2012-06-25T19:13:49.787 に答える
-2

これを試して、

<?php
$arr1=array('result1'=>'abcd','result2'=>'efg'); 
$arr2=array('result1'=>'hijk','result2'=>'lmn'); 
$arr3=array($arr1,$arr2); 
print (json_encode($arr3)); 
?>
于 2014-11-29T14:51:05.973 に答える