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'});