我试图在 PHP 中简化一个人为的回调函数以进行排序。
function my_sort($a, $b) {
if($a == $b) return 0;
return $a < $b ? 1 : -1;
}
根据有关 usort 的 PHP 文档,当您返回 equal 时,顺序未定义。
这是否意味着我可以完全跳过平等测试?
function my_sort($a, $b) {
return $a < $b ? 1 : -1;
}
我试图在 PHP 中简化一个人为的回调函数以进行排序。
function my_sort($a, $b) {
if($a == $b) return 0;
return $a < $b ? 1 : -1;
}
根据有关 usort 的 PHP 文档,当您返回 equal 时,顺序未定义。
这是否意味着我可以完全跳过平等测试?
function my_sort($a, $b) {
return $a < $b ? 1 : -1;
}
正如@lanzz 所说,以这种方式编写排序函数会降低效率。相等的元素将被视为不相等(= 应该重新排序),因此排序函数的调用次数会更高。
例如:
$aops = 0;
$x = array(1, 1, 1, -1, -1, -1, 0, 0, 0);
usort($x, function($a, $b) use (&$aops) { $aops++; return $a < $b ? -1 : 1; });
var_dump($aops); // 34
$bops = 0;
$x = array(1, 1, 1, -1, -1, -1, 0, 0, 0);
usort($x, function($a, $b) use (&$bops) { $bops++; return $a === $b ? 0 : ($a < $b ? -1 : 1); });
var_dump($bops); // 17
但是,如果保证已排序数组的所有元素都是唯一的,这显然不是问题。