php - 使用 PHP 中的 json_encode 时,JQuery $.each 循环会重新排序我的数组

标签 php javascript jquery arrays json

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 在响应 header 中调用 ajax 时,它的顺序似乎是正确的:

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

但是,当我在 $.each 循环中执行 console.log 时,它会重新排序

最佳答案

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

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

要迭代普通对象,$.each 使用标准 for..in 构造,其中 the MDN precises that

A for...in loop iterates over the properties of an object in an arbitrary order

如果你想保持任意键值有序,你应该将它们存储在适当的数组中:

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

关于php - 使用 PHP 中的 json_encode 时,JQuery $.each 循环会重新排序我的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154427/

相关文章:

php - 使用 .load() 获取数据时 jQuery 出现问题

javascript - JS/JQuery : I Can't get the loop right

javascript - D3.js exit() 似乎没有得到更新的信息

javascript - 拉取选择列表的值并使用它来搜索 ID 值会导致所有剩余的 JavaScript 失效

jQuery 计算 div 中的字符数?

php - Magento - 使用 SQL 查询删除所选产品

php - 从自定义页面插入数据库

php - 在时隙之间查找具有给定任务的空间

php - Jquery 自动增长与另一个文本区域

JavaScript - 创建可链接函数的最佳方法是什么?