按值的顺序访问数组

时间:2013-08-16 12:05:41

标签: php javascript json

我正在使用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"}]

我想保留与原始数组相同的顺序。怎么办呢?

2 个答案:

答案 0 :(得分:2)

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

Sort JavaScript object by key

如果顺序很重要,则应创建一个对象数组,每个对象的位置如下:

{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"}
]