Jquery sorting php unsorted array



下面是我的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 中发送的顺序相同的顺序获取它。任何帮助,不胜感激。提前谢谢。

数组中的键指示排序。

如果您想要一个特定的订单,那么您应该在将其发送到前端之前对其进行订购。

我不相信您可以将数据发送到前端而不将其排序为放入对象。

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

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

如注释中所述,如果项目的顺序很重要,则需要使用数组,因为在 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 语法。如果这是一个问题,还有其他方法可以合并对象。

最新更新