json_encode将PHP数组稀疏为JSON数组,而不是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将我的数组编码为数组呢?


森栏
浏览 427回答 3
3回答

繁华开满天机

您正在观察此行为,因为您的数组不是顺序的-它具有键0和2,但没有1键。仅具有数字索引是不够的。json_encode仅当您的PHP数组是顺序的时,即如果其键为0、1、2、3,...时,才会将PHP数组编码为JSON数组。您可以使用array_values函数顺序地对数组重新索引以获得所需的行为。例如,以下代码在您的用例中可以成功运行:echo json_encode(array_values($input)).

慕妹3146593

Array中仅JSON是索引数组,因此您尝试获取的结构无效的Json / Javascript。PHP关联数组是JSON中的对象,因此,除非不需要索引,否则无法进行此类转换。如果要获得这样的结构,可以执行以下操作:$indexedOnly = array();foreach ($associative as $row) {    $indexedOnly[] = array_values($row);}json_encode($indexedOnly);将返回类似:[     [0, "name1", "n1"],     [1, "name2", "n2"],]

LEATH

尝试这个,<?php$arr1=array('result1'=>'abcd','result2'=>'efg');&nbsp;$arr2=array('result1'=>'hijk','result2'=>'lmn');&nbsp;$arr3=array($arr1,$arr2);&nbsp;print (json_encode($arr3));&nbsp;?>
打开App,查看更多内容
随时随地看视频慕课网APP