PHP排序的关联数字键数组传递给ajax不起作用


PHP sorted associate numeric key array passing to ajax not work

我有一个函数返回一个关联的数字键数组:

public static function getSortedFruits()
{
$fruits = array('100' => 'lemon', '102' => 'orange', '103' => 'apple', '204' => 'banana');
asort($fruits);
print_r($fruits); // return sorted array('103' => 'apple', '204' => 'banana', '100' => 'lemon', '102' => 'orange')
return $fruits;
}

我从PHP代码中调用这个函数,数组是排序的

$fruits = getSortedFruits(); // sorted array

当我从ajax调用这个函数时,数组和以前一样,不是排序的

$('#fruits').bind('change', function() {
        $.ajax({
            type: 'POST',
            url: '/ajax/getFruits', // route to getFruits function
            dataType: 'json',
            success: function(result) {
               console.log(result); // the array isn't sorted
            });
});

如果$fruits的键不是数字的,例如a、b、c,则结果按函数调用和ajax请求的正常方式排序。

asort 方法基于数组值进行排序。print_r和json_encode的输出在顺序上没有区别。

$fruits = array('1' => 'lemon', '2' => 'orange', '3' => 'apple', '4' => 'banana');
asort($fruits);
print_r($fruits);
// Above outputs:Array ( [3] => apple [4] => banana [1] => lemon [2] => orange )
echo json_encode($fruits);
// Above outputs: {"3":"apple","4":"banana","1":"lemon","2":"orange"}

我已经在我的本地电脑上用xampp测试了你的代码,你必须使用

print_r($fruits)

echo json_encode($fruits);

而不是

return $fruits

更新

在返回函数getSortedFruits()之后对数组进行编码,类似

$fruits = getSortedFruits(); // sorted array
json_encode($fruits)