この例では、配列 data
の個々の要素がテーブルのひとつの行を表しています。
これは、データベースのレコードの典型的な形式です。
volume | edition
-------+--------
67 | 2
86 | 1
85 | 6
98 | 2
86 | 6
67 | 7
データは data という名前の配列に格納します。
これは、例えば mysql_fetch_assoc()
の結果をループさせたりすれば得られます。
この例では、データを volume の降順、
edition の昇順に並べ替えます。
私たちが今もっているのは行方向の配列ですが、
array_multisort() で必要なのは列方向の配列です。
そこで、以下のコードで列方向の配列を得たあとでソートを行います。
<?php
// このデータは、mysqli_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);
// カラムのリストを取得
foreach ($data as $key => $row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// 上記のコードの代わりに array_column() を使用できます
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
// データを volume の降順でソートし、edition の昇順でソート
// $data を最後のパラメータとして追加
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
// $data をループし、ソート済みの値をカラムごとに出力
echo 'volume | edition', PHP_EOL;
echo '-------+--------', PHP_EOL;
for ($i = 0; $i < count($data); $i++) {
printf("%6d | %7d\n", $volume[$i], $edition[$i]);
}
?>
データセットの行はソートされ、以下のようになります:
volume | edition
-------+--------
98 | 2
86 | 1
86 | 6
85 | 6
67 | 2
67 | 7