php json_encode()输出会根据数组索引进行更改

php json_encode()输出会根据数组索引进行更改,php,json,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

我试图从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"]
?>

那么原因是什么呢?

因为
数组(0=>“零”,1=>“一”)
数组(“零”,“一”)
相同,JSON编码器假设后者是一个列表(因为PHP就是这样列表的),并且无法区分前者和后者

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

json_encode(array(0=>"zero",1=>"one"), JSON_FORCE_OBJECT)
// {"0":"zero","1":"one"}
如果你总是想要一个json列表,那么在编码之前就不要使用键。

因为
数组(0=>“零”,1=>“一”)
数组(“零”,“一”)
相同,json编码器假设后者是一个列表(因为PHP就是这样列出的),并且无法区分前者和后者

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

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

如果你总是想要一个json列表,那么在编码之前就不要使用键。

那么
array(0=>“零”,2=>“二”)
?它没有从零索引开始的连续计数,因此不管怎样都会被视为一个对象,因为它不能成为列表。那么
array(0=>“零”,2=>“二”)呢
?它没有从零索引开始的连续计数,因此无论如何都会被视为对象,因为它不能是列表。