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 中的数组JavaScript 对象表示法 (JSON) 数据交换格式

数组结构表示为围绕零个或多个值(或元素)的方括号。元素用逗号分隔。

数组 = 开始数组 [ 值 *( 值分隔符值 ) ] 结束数组

您正在观察这种行为,因为您的数组不是连续的 - 它有键02,但没有1作为键。

仅仅有数字索引是不够的。json_encode如果您的 PHP 数组是顺序的,则只会将您的 PHP 数组编码为 JSON 数组 - 也就是说,如果它的键是 0, 1, 2, 3, ...

您可以使用该array_values函数按顺序重新索引数组以获得所需的行为。例如,以下代码在您的用例中成功运行:

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

ArrayinJSON索引数组,因此您尝试获取的结构不是有效的 Json/Javascript。

PHP Associatives 数组是 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

json_decode($jsondata, true);

true将所有属性转换为数组(顺序或不顺序)

于 2017-03-31T18:58:05.323 回答
-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 回答