我有一个数组,看起来像这样:
$this->wordswithdata = [
'team1' => [
'points' => 10,
'players' => [],
],
'team2' => [
'points' => 23,
'players' => []
]
];
我想按各队得分从高到低的顺序对各队进行排序。我试过这样做:
function sort_by_points($a,$b)
{
if ($a['points'] == $b['points']) return 0;
return ($a['points'] < $b['points']) ? 1 : -1;
}
usort($this->wordswithdata, "sortbycount");
但是这种方法覆盖了包含团队名称的键,并返回:
[
0 => [
'points' => 23,
'players' => []
],
1 => [
'points' => 10,
'players' => [],
]
]
有没有办法在不丢失作为数组键的teamname的情况下对数组进行排序?
6条答案
按热度按时间blpfk2vs1#
您可以使用
uasort
:此函数使用用户定义的比较函数对数组进行排序,以使数组索引保持其与关联数组元素的相关性。
qmelpv7a2#
U可以按值对关联数组进行排序,如下所示
moiiocjp3#
试试这个代码,希望它能工作.
vbopmzt14#
yzxexxkh5#
为了完整起见,本页应该包括一个使用
array_multisort()
的方法--这个函数在缺省情况下将保留非数字键。代码:(Demo)
也就是说,用飞船运算符调用
uasort()
并没有错,注意$b
数据在三路比较运算符的左边,$a
在右边,实现降序排序。代码:Demo
hgtggwj06#
使用uasort函数,它应该保持key =〉value关联不变。
(side注意:你可以用
return $a['points'] - $b['points']
代替ifs,或者从php7开始用spacehsip<=>
operator,thx mbomb007来更新)