我在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
将数组编码为数组呢?
答案 0 :(得分:172)
您正在观察此行为,因为您的数组不是顺序的 - 它具有键0
和2
,但没有1
作为键。
仅仅拥有数字索引是不够的。如果您的PHP数组是顺序的,那么json_encode
只会将您的PHP数组编码为JSON数组 - 也就是说,如果它的键是0,1,2,3 ......
您可以使用array_values
函数按顺序重新索引数组,以获得所需的行为。例如,下面的代码在您的用例中成功运行:
echo json_encode(array_values($input)).
答案 1 :(得分:71)
Array
中的{p> JSON
是索引数组 ,因此您尝试获取的结构无效Json / Javascript。
PHP Associatives数组是JSON中的对象,因此除非您不需要索引,否则无法进行此类转换。
如果你想获得这样的结构,你可以这样做:
$indexedOnly = array();
foreach ($associative as $row) {
$indexedOnly[] = array_values($row);
}
json_encode($indexedOnly);
将返回类似的内容:
[
[0, "name1", "n1"],
[1, "name2", "n2"],
]
答案 2 :(得分:1)
json_decode($ jsondata,true);
true 将所有属性转换为数组(顺序或不顺序)
答案 3 :(得分:-1)
试试这个,
<?php
$arr1=array('result1'=>'abcd','result2'=>'efg');
$arr2=array('result1'=>'hijk','result2'=>'lmn');
$arr3=array($arr1,$arr2);
print (json_encode($arr3));
?>