我有一个函数返回一个关联的数字键数组:
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)