空数组字段导致json_encode的输出类型从JSONArray更改为JSONObject

时间:2014-06-27 19:12:41

标签: php arrays json

此代码的输出类型是JSONArray:

for($i=0;$i<4;++$i)
{
    $data[$i]['Name'] = 'myname'.$i;
}
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
header('Content-type: application/json; charset=utf-8');
echo $json;

结果:

[{"Name":"myname0"},{"Name":"myname1"},{"Name":"myname2"},{"Name":"myname3"}]

但是当我跳过其中一些时,它的输出类型将是JSONObject !!!:

for($i=0;$i<4;++$i)
{
    $data[$i]['Name'] = 'myname'.$i;
    ++$i;
}

$json = json_encode($data, JSON_UNESCAPED_UNICODE);
header('Content-type: application/json; charset=utf-8');
echo $json;

结果:

{"0":{"Name":"myname0"},"2":{"Name":"myname2"}}

为什么?!

正如您所看到的,他们的字段编号将作为这些对象的名称。

1 个答案:

答案 0 :(得分:1)

Quote from manual

  

编码数组时,如果键不是连续数字   序列从0开始,所有键都编码为字符串,和   为每个键值对明确指定。

你问题中的第二个例子显然是指上述情况。这就是结果JSON成为JS object

的原因