jQuery排序php未排序数组

时间:2018-08-14 09:09:08

标签: php jquery ajax

下面是我的PHP文件。

$test = array('4'=>'test','5'=>'test','1'=>'test','2'=>'test');        
return array(
  "status" => "test
  "data" => $test
);

我正在将该数组发送到AJAX:

$.ajax({
  url: url,
  type: "POST",
  data: {},
  success: function(result) {
    if (result.status == 'test') {
      console.log(result.data);
    }
  }
});

我得到以下输出:

{1: "test", 2: "test", 4: "test", 5: "test"}

它获取数据的顺序与我从PHP发送的顺序不同。我想以与发送PHP相同的顺序来获取它。任何帮助表示赞赏。预先感谢。

2 个答案:

答案 0 :(得分:0)

数组中的键指示顺序。

如果您要特定的订单,则应先定购,然后再发送到前端。

我不相信您可以将数据发送到前端,而无需将其按放入对象的顺序进行排序。

为进一步帮助您进行测试,您还可以考虑在数组中指定不同的值。

这样,您将能够区分存储在数组中的不同值。

答案 1 :(得分:0)

如评论中所述,如果项的顺序很重要,则需要使用数组,因为在JS中不能保证对象的属性顺序。

在PHP方面,将关联数组转换为数组:

$test = array('4'=>'test','5'=>'test','1'=>'test','2'=>'test');
$testArray = array_map(function($key) use($test) { return [$key, $test[$key]]; }, array_keys($test));

return array(
  "status" => "test
  "data" => $testArray
);

在JS端,将其转换回对象:

$.ajax({
  url: url,
  type: "POST",
  data: {},
  success: function(result) {
    if (result.status == 'test') {
      const data = result.data.reduce((result, entry) => ({...result, ...{[entry[0]]: entry[1]}}), {});
      console.log(data);
    }
  }
});

注意:这使用ECMAScript 2018语法。如果有问题,则有other ways to merge objects