1

したがって、私はかなり大きなデータの配列を取得し、それらを2つの基準で並べ替える必要があります。

変数$data['important']とがあります$data['basic']

これらは単純な数値であり、私はuasortを使用して、 $data最初に重要な順に、次に基本的な順にソートしています。

それで

Important | Basic
10        | 8
9         | 9
9         | 7
7         | 9

usort関数は単純です

public function sort_by_important($a, $b) {

        if ($a[important] > $b[important]) {
            return -1;
        } 
        elseif ($b[important] > $a[important]) {
            return 1;
        } 
        else {
            return 0;
        }
    }

配列を2番目の変数に並べ替えて、重要な順序を維持するにはどうすればよいですか?

みんな、ありがとう。

編集

この後に3番目の並べ替えオプションを追加するのはどうですか?とても重要>基本>少ない

4

2 に答える 2

4

あなたは本当に使うべきですarray_multisort()

// Obtain a list of columns
foreach ($data as $key => $row) {
    $important[$key]  = $row['important'];
    $basic[$key] = $row['basic'];
}

array_multisort($important, SORT_NUMERIC, SORT_DESC,
                $basic, SORT_NUMERIC, SORT_DESC,
                $data);

ただし、使用する必要がある場合usort()

public function sort_by_important($a, $b) {

    if ($a[important] > $b[important]) {
        return -1;
    } elseif ($b[important] > $a[important]) {
        return 1;
    } else {
        if ($a[basic] > $b[basic]) {
            return -1;
        } elseif ($b[basic] > $a[basic]) {
            return 1;
        } else {
            return 0;
        }
    }
}
于 2010-05-20T16:06:31.140 に答える
2

単純にarray_multisort()を使用してみませんか

public function sort_by_important($a, $b) { 
    if ($a['Important'] > $b['Important']) { 
        return -1; 
    } elseif ($b['Important'] > $a['Important']) { 
        return 1; 
    } else { 
        if ($a['Basic'] > $b['Basic']) { 
            return -1; 
        } elseif ($b['Basic'] > $a['Basic']) { 
            return 1; 
        } else { 
            return 0; 
        }
    } 
} 
于 2010-05-20T16:04:30.070 に答える