0

我有一个 php 数组,我正在使用它进行编码json_encode,如下所示。

PHP代码:

$arr=array(10=>"Apple",1=>"Ball",9=>"Cat",11=>"Dog",15=>"Elephant");
echo json_encode($arr);

json 编码的输出保持与原始数组相同的顺序。但是当我尝试访问json_encodejavascript 中的输出时,该对象的元素按递增的数字索引排序:

控制台日志:

[{1="Ball",9="Cat",10="Apple",11="Dog",15="Elephant"}]

我想保留与原始数组相同的顺序。如何才能做到这一点?

4

2 回答 2

2

您不应该依赖 javascript 对象的键顺序。有关更多信息,请参阅此帖子:

按键排序 JavaScript 对象

如果顺序很重要,您应该创建一个对象数组,每个对象如下所示:

{9: "Cat"}

正如我链接到的帖子中所述,如果您只需要以特定顺序迭代,另一种选择是保留您拥有的结构,用于Object.keys()获取键,然后对它们进行排序,然后遍历排序的键。

于 2013-08-16T12:10:55.960 回答
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"}
]
于 2013-08-16T12:10:45.910 回答