我有一个只有一行代码的usort函数:return 0。我尝试在stdClass对象数组上使用它,结果改变了它们的顺序,这是怎么可能的?
$halfway = intval(count($array) / 2);
似乎可以解决这个问题,但我不确定是否会影响其他东西(将数组精确地切片很重要吗?)。 - fiskhandlarn这是因为该函数的意思是“我真的不在乎它们如何排序,它们对我来说是相等的”。通过这个简单的示例,我收到了反转的数组:
function sortaaa($a,$b) {return 0;}
$array = array(1,2,3,4,5);
usort($array,"sortaaa");
var_dump($array);
//prints array(5) { [0]=> int(5) [1]=> int(4) [2]=> int(3) [3]=> int(2) [4]=> int(1) }
看起来PHP在函数usort
中以相反的顺序循环数组。因此,请注意usort
manual中所述:
如果两个成员比较相等,则它们在排序后的数组中的顺序是未定义的。
<?php
uksort($array, function ($ak, $bk) use ($array) {
$a = $array[$ak];
$b = $array[$bk];
if ($a['foo'] === $b['foo'])
return $ak - $bk;
return $a['foo'] > $b['foo'] ? 1 : -1;
});
$array
的初始索引(键)按升序排列时,此功能才能正常工作。