【发布时间】:2020-05-25 23:53:48
【问题描述】:
我正在尝试在数组上使用 usort,并获得关于 PHP 版本的不同行为:
$arr1 = [
[
'points' => 10,
'date' => 3,
],
[
'points' => 10,
'date' => 2,
],
[
'points' => 10,
'date' => 1,
]
];
usort($arr1, function ($a, $b) {
if($a['points'] == $b['points']){
return 0;
}
return ($a['points'] < $b['points']) ? 1 : -1;
});
此数组包含一个“日期”值,并按此值排序 DESC,根据“点”值进行排序后,具有相同“点”值的项目在 PHP 5.6 上反转,并保持其原始顺序在 PHP 7.0...
您可以在此处使用不同的 PHP 版本进行在线测试(请针对 PHP 5.6.29 和 7.0.1 进行测试):http://sandbox.onlinephpfunctions.com/code/2715220539623b4b699ebb3f90a4b01c98eef53d
在任何 PHP 版本下,我怎样才能在相等的点上获得相同的排序行为?
【问题讨论】:
-
你想要哪种行为? PHP 5.6 或 7 中的那个?
-
PHP 的排序函数并不稳定,它们没有指定相等元素的顺序。
-
这称为未定义行为。如果两个项目相同,则不应依赖它们的顺序。