为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
森栏 2019-10-08 15:00:30
我在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将我的数组编码为数组呢?
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

您正在观察此行为,因为您的数组不是顺序的-它具有键0和2,但没有1键。


仅具有数字索引是不够的。json_encode仅当您的PHP数组是顺序的时,即如果其键为0、1、2、3,...时,才会将PHP数组编码为JSON数组。


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


echo json_encode(array_values($input)).


查看完整回答
反对 回复 2019-10-08
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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"],

]


查看完整回答
反对 回复 2019-10-08
?
LEATH

TA贡献1936条经验 获得超6个赞

尝试这个,


<?php

$arr1=array('result1'=>'abcd','result2'=>'efg'); 

$arr2=array('result1'=>'hijk','result2'=>'lmn'); 

$arr3=array($arr1,$arr2); 

print (json_encode($arr3)); 

?>


查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 426 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信