json_encode稀疏PHP数组作为JSON数组,而不是JSON对象

时间:2012-06-25 19:06:27

标签: php json

我在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 个答案:

答案 0 :(得分:172)

您正在观察此行为,因为您的数组不是顺序的 - 它具有键02,但没有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)); 
?>