【发布时间】:2017-11-02 17:21:31
【问题描述】:
我需要使用以下逻辑对以下数组进行排序:如果“分数”相同,我想使用“时间”进行比较。数组如下:
$user_scores = [ 82 => [ 'score' => 1, 'time' => 6.442 ],
34 => [ 'score' => 1, 'time' => 5.646 ],
66 => [ 'score' => 3, 'time' => 1.554 ]
]
上述数组中的“键”是“user_ids”,我需要将其保存在排序后的数组中。到目前为止,我最好的尝试如下 -
$result = usort( $user_scores, function ( $a, $b ) {
if ( $a['score'] == $b['score'] ) {
return $a['time'] == $b['time'];
}
return $a['score'] <=> $b['score'];
} );
显然,这不起作用,我得到 $user_scores 数组,其中所有键都替换为 0、1、2 而不是 user_ids(82、34 和 66)。排序也不起作用。
对于上面的数组,我想要的输出是 $user_scores 数组:
$user_scores = [ 34 => [ 'score' => 1, 'time' => 5.646 ],
82 => [ 'score' => 1, 'time' => 6.442 ],
66 => [ 'score' => 3, 'time' => 1.554 ]
]
如果您能告诉我如何使用 spaceship 运算符来完成这项工作(如果有意义的话),我将不胜感激。感谢您抽出宝贵时间,期待您的回复。
---更新---
需要的排序逻辑是这样的:
- 分数越高,排名越高。
- 时间越高,等级越低。
它基本上是对测验的结果进行排序。时间最少的得分最高的人将在榜首;而那些分数较低且时间较长的人将排在最后。
【问题讨论】:
标签: php sorting multidimensional-array usort asort