排序数组并保留键的值

新手上路,请多包涵

我有一个看起来像这样的数组:

 Array
(
    [team1] => Array
        (
            [points] => 10
            [players] => Array
                (
                     ...
                )
        )

    [team2] => Array
        (
            [points] => 23
            [players] => Array
                (
                     ...
                )
        )

    ... many more teams
)

我想按每支球队的得分对球队进行排序。我试过这个:

 function sort_by_points($a,$b)
{
    if ($a['points']==$b['points']) return 0;
        return ($a['points']<$b['points'])?1:-1;
}

usort($this->wordswithdata, "sortbycount");

但是这种方法会覆盖包含团队名称的键并返回:

 Array
(
    [0] => Array
        (
            [points] => 23
            [players] => Array
                (
                     ...
                )
        )

    [1] => Array
        (
            [points] => 10
            [players] => Array
                (
                     ...
                )
        )

    etc...
)

有什么方法可以在不将团队名称覆盖为数组键的情况下对数组进行排序吗?

原文由 acrmuui 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 609
2 个回答

使用 uasort 函数,它应该保持 key => value 关联完整。

(旁注:你可以做 return $a['points'] - $b['points'] 而不是 ifs)

原文由 complex857 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 uasort

 uasort($array, function($a, $b) {
    return $a['points'] - $b['points'];
});

此函数使用用户定义的比较函数对数组进行排序,以便数组索引与 它们关联的数组元素保持相关 性。

原文由 Shoe 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏