php json_encode()输出基于数组索引的变化

时间:2014-05-23 05:00:21

标签: php json

我试图从MySQL数据库中获取一些值,当使用json_encode()转换为JSON数组时,我得到了一个JSON对象,过了一段时间我发现索引是问题的根本原因

这是我提到的例子

<?php
$array = array(0=>"zero",2=>"two");
$another_array=array(0=>"zero",1=>"one");

print_r(json_encode($array)); // output: {"0":"zero","2":"two"}
print_r(json_encode($another_array)); //output: ["zero","one"]
?>

那是什么原因?

1 个答案:

答案 0 :(得分:4)

因为array(0=>"zero",1=>"one")array("zero", "one")相同而且JSON编码器假定后者是一个列表(因为PHP就是这样做的列表)并且无法告诉前者后者。

如果要强制json_encode将所有数组视为对象,请将JSON_FORCE_OBJECT作为第二个参数传递:

json_encode(array(0=>"zero",1=>"one"), JSON_FORCE_OBJECT)
// {"0":"zero","1":"one"}

如果您总是想要一个json列表,请在编码之前删除密钥(例如使用array_values())。