当使用PHP中的json_encode时,每个循环都会重新排序我的数组


JQuery $.each loop reorders my array when using json_encode from PHP

PHP:

 $arr[0] = 'A';
 $arr['C'] = 'C';
 $arr[10] = 'B';
 echo json_encode($arr);

JQuery:

 $.each(result, function(i, item) {
    console.log(i + " => " + item);
 });

期望输出:

   0 => A
   C => C
   10 => B

相反,我得到:

   0 => A
   10 => B
   C => C

在不修改PHP代码或重新构造数组的情况下,我如何防止它重新排列我的数组?

编辑:

当使用firebug在响应头中调用ajax时,它的顺序似乎是正确的:

"0":"A","C":"C","10":"B"

然而,当我在$.log中执行console.log时,每个循环都会重新排序

您的$arr是一个对象,而不是一个数组,键既没有索引也没有排序。

在JavaScript中,您不能保证对象属性的迭代顺序,只能保证数组的索引键(即整数键(。

为了在普通对象上迭代,$.each使用标准的for..in构造,MDN在该构造上精确计算

A代表。。。in循环在任意顺序

如果你想保持任意键值的有序,你应该把它们都存储在一个合适的数组中:

  var arr = [];
  arr.push({key:0, value:'A'});
  arr.push({key:'C', value:'C'});
  arr.push({key:10, value:'B'});