0

我有一组玩家,它们本身就是数组,我想按分数排序。

[player_info] => Array
(
    [0] => Array
        (
            [player_] => âlêj!!tâ~ôk
            [score_] => 66
            [ping_] => 
            [team_] => Blue
        )

    [1] => Array
        (
            [player_] => alejitbella
            [score_] => 3
            [ping_] => 
            [team_] => Blue
        )

    [2] => Array
        (
            [player_] => §Uph§£lMejo
            [score_] => 34
            [ping_] => 
            [team_] => Red
        )

    [3] => Array
        (
            [player_] => timoleon
            [score_] => 10
            [ping_] => 
            [team_] => Red
        )

)

我已经设法让 usort 正常工作(上面的示例中没有显示)但是我需要保留团队的位置。假设 Simon、Becky、Alek 和 George 在这里。

Simon 25 Red
Becky 13 Red
Alek 3 Blue
George 5 Blue

我希望能够按从高到低的顺序排列它们,同时根据团队保留它们在阵列中的位置。

我怎么能做到这一点?

编辑:由于人们认为这是重复的,我需要澄清一下。

我想按分数排序,同时保留“红”和“蓝”队的顺序

基本上我想把上面的例子变成 Simon 25 Red Becky 13 Red George 5 Blue Alek 3 Blue

4

1 回答 1

0

希望我理解正确。这是我的罐头功能。由于您没有显示 usort() 我不知道它是否仍然需要或如何使用它:

function array_column_sort(&$array, $column, $sort=SORT_ASC) {
    foreach($array as $key => $val) {
        $sort_array[$key] = $val[$column];
    }
    array_multisort($sort_array, $sort, $array);
}

// run yours like this
array_column_sort($array['player_info'], 'score_', SORT_DESC);

$sort 标志与为 array_multisort() 定义的相同

为了保持团队(没有时间投入功能,你的练习)试试这个(未经测试):

foreach($array['player_info'] as $key => $val) {
    $score[$key] = $val['score_'];
    $team[$key]  = $val['team_'];
}
array_multisort($team, SORT_ASC, $score, SORT_DESC, $array['player_info']);
于 2013-11-07T02:56:48.023 回答