2次元配列のソート
例3 データベースの結果をソートするこの例では、配列 data の個々の要素がテーブルのひとつの行を表しています。 これは、データベースのレコードの典型的な形式です。
データの例:
volume | edition
——-+——–
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7データは data という名前の配列に格納します。 これは、例えば mysql_fetch_assoc() の結果をループさせたりすれば得られます。
$data[] = array(’volume’ => 67, ‘edition’ => 2);
$data[] = array(’volume’ => 86, ‘edition’ => 1);
$data[] = array(’volume’ => 85, ‘edition’ => 6);
$data[] = array(’volume’ => 98, ‘edition’ => 2);
$data[] = array(’volume’ => 86, ‘edition’ => 6);
$data[] = array(’volume’ => 67, ‘edition’ => 7);
?>この例では、データを volume の降順、 edition の昇順に並べ替えます。
私たちが今もっているのは行方向の配列ですが、 array_multisort() で必要なのは列方向の配列です。 そこで、以下のコードで列方向の配列を得たあとでソートを行います。
// 列方向の配列を得る
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}// データを volume の降順、edition の昇順にソートする。
// $data を最後のパラメータとして渡し、同じキーでソートする。
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>データセットの行はソートされ、以下のようになります:
volume | edition
——-+——–
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7