-3

重複の可能性:
PHP - 複数の uasort 関数がソートを中断する

PHP に 3 列の多次元配列があります。「awarded_units」で並べ替える必要があり、2 人のユーザーが同じ award_units(tiebreaker) を持っている場合、選択されたユニットが最も少ないユーザーが最初に来ます。

user_id awarded_units selected_units

15       5               2
22       5               1
3        4               2
4        4               5
5        4               1

ご覧のとおり、多次元ソート関数を使用して、 award_units に基づいて配列をソート済みです。ここで、タイブレーカー条件を解決する必要があります。user_id=15 と user_id=22 は同じ award_units を持っているため、user_id 22 が最初に来る必要があります。

正しい順番になります

user_id awarded_units selected_units

22       5               1
15       5               2
5        4               1
3        4               2
4        4               5

親切にこれを行う方法を教えてください。ありがとう

4

2 に答える 2

1

あなたが使用することができますarray_multisort

$cols = array();
foreach ($multiArray as $key => $value) 
{
    $cols['awarded_units'][$key]  = $value['awarded_units'];
    $cols['selected_units'][$key] = $value['selected_units'];
}
array_multisort($cols['awarded_units'], SORT_DESC, $cols['selected_units'], SORT_ASC, $multiArray);
于 2012-10-26T13:58:18.437 に答える
0

usortでカスタムソート関数を使用します:

usort($data, function($a, $b) {
    if ($a['awarded_units'] == $b['awarded_units'])
    {
        return $b['selected_units'] - $a['selected_units'];
    }

    return $b['awarded_units'] - $a['awarded_units'];
});

これにはarray_multisortを使用することもできますが、私はusortを使用することを好みます。柔軟性と可読性が向上します。

于 2012-10-26T13:59:18.680 に答える