2 回答
TA贡献1847条经验 获得超7个赞
好的,你可以让它更简单,如下所示:
usort($arr,function($data1,$data2){
if($data1['wins'] != $data2['wins']) return -1 * ($data1['wins'] - $data2['wins']);
return abs($data1['scoreGuess'] - $data1['totalScore']) - abs($data2['scoreGuess'] - $data2['totalScore']);
});
演示: https ://3v4l.org/KCuf9
我们看看winsset 是否与其他 set 相等wins。
如果它们不相等,我们返回两者的差乘以-1降序排列。
scoreGuess如果它们相等,我们取和之间差异的绝对值之差totalScore。
TA贡献1848条经验 获得超6个赞
尝试使用以下解决方案usort,当获胜次数不同时,按获胜次数排序。当获胜次数相等时,使用 totalScore 和 scoreGuess 之间的差值进行排序。
$array = [
0 => [
'uid' => 1,
'Fname' => 'Kcir',
'Lname' => 'Nayr',
'wins' => 12,
'scoreGuess' => 45,
'totalScore' => 26,
],
1 => [
'uid' => 2,
'Fname' => 'Doe',
'Lname' => 'John',
'wins' => 12,
'scoreGuess' => 35,
'totalScore' => 26,
],
2 => [
'uid' => 3,
'Fname' => 'Greg',
'Lname' => 'Cuenca',
'Nickname' => 'Greg',
'wins' => 11,
'scoreGuess' => 21,
'totalScore' => 26,
],
3 => [
'uid' => 4,
'Fname' => 'Kenneth',
'Lname' => 'Agee',
'wins' => 12,
'scoreGuess' => 34,
'totalScore' => 26,
],
];
usort($array, function($prev, $next) {
if ($next['wins'] == $prev['wins']) {
return abs($prev['scoreGuess'] - $prev['totalScore']) <=> abs($next['scoreGuess'] - $next['totalScore']);
} else {
return $next['wins'] <=> $prev['wins'];
}
});
结果是:
Array
(
[0] => Array
(
[uid] => 4
[Fname] => Kenneth
[Lname] => Agee
[wins] => 12
[scoreGuess] => 34
[totalScore] => 26
)
[1] => Array
(
[uid] => 2
[Fname] => Doe
[Lname] => John
[wins] => 12
[scoreGuess] => 35
[totalScore] => 26
)
[2] => Array
(
[uid] => 1
[Fname] => Kcir
[Lname] => Nayr
[wins] => 12
[scoreGuess] => 45
[totalScore] => 26
)
[3] => Array
(
[uid] => 3
[Fname] => Greg
[Lname] => Cuenca
[Nickname] => Greg
[wins] => 11
[scoreGuess] => 21
[totalScore] => 26
)
)
- 2 回答
- 0 关注
- 230 浏览
添加回答
举报
