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 關注
- 194 瀏覽
添加回答
舉報