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 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 に答える