我正在使用json_encode
进行编码的php数组,如下所示。
PHP代码:
$arr=array(10=>"Apple",1=>"Ball",9=>"Cat",11=>"Dog",15=>"Elephant");
echo json_encode($arr);
json编码输出保持与原始数组相同的顺序。但是当我尝试在javascript中访问json_encode
输出时,该对象的元素按递增的数字索引排序:
控制台日志:
[{1="Ball",9="Cat",10="Apple",11="Dog",15="Elephant"}]
我想保留与原始数组相同的顺序。怎么办呢?
答案 0 :(得分:2)
您不应该依赖javascript对象的键顺序。有关更多信息,请参阅此帖子:
如果顺序很重要,则应创建一个对象数组,每个对象的位置如下:
{9: "Cat"}
正如我链接到的帖子所述,另一个选项,如果您只需要按特定顺序进行迭代,就是保留您拥有的结构,使用Object.keys()
获取密钥,然后对它们进行排序,然后迭代排序的键。
答案 1 :(得分:1)
尝试引用索引(有效地使它们成为字符串):
$arr = array("10" => "Apple", "1" => "Ball", "9" => "Cat", "11" => "Dog", "15" => "Elephant");
echo json_encode($arr);
这将为您提供一个看起来像
的对象{
"10": "Apple",
"1": "Ball",
"9": "Cat",
"11": "Dog",
"15": "Elephant"
}
如果你必须有一个数组,你需要以不同的方式构建你的PHP数组:
$arr = array(array(10 => "Apple"), array(1 => "Ball"), array(9 => "Cat"), array(11 => "Dog"), array(15 => "Elephant"));
echo json_encode($arr);
将输出
[
{"10":"Apple"},
{"1":"Ball"},
{"9":"Cat"},
{"11":"Dog"},
{"15":"Elephant"}
]