多次元配列をソートする

2007/12/10 | PHPの基本

とある案件で、配列に格納されたデータをソートする処理が必要になった。
今までは、基本的にデータの保存にはデータベースを使用していたので、配列としてデータを取り扱う以前にデータのソートは完了しているのが常だった。しかし今回データベースを使用せず、CSV形式で与えられていたので、配列に格納されたデータをソートする必要が出てきたわけだ。
実はこの処理、それほど難しいわけではなく、PHPで標準装備の関数で対応できる。それがarray_multisort関数だ。ただコマンド一発!というわけではなく、事前準備が必要となる。処理内容は以下の通り。

foreach ($data as $key => $row) {
$volume[$key] = $row[‘volume’];
$edition[$key] = $row[‘edition’];
}
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

条件としてデータ「$data」が多次元配列で、その各行でいくつかのデータが指定され、かつ、それらのデータのうち「volume」「edition」というキーで与えられた値を元にソートするものとする。

最初のforeach文で、各行の「volume」「edition」のキーで指定された値をあらかじめ全て取り出して、変数に格納しておく必要がある。これを使い、array_multisort関数にデータ、ソート対象を引き渡す。関数が実行されると$dataがソートされている、というわけだ。

この関数、引数の与え方が他の関数とずいぶん違うので、使用する際は注意が必要になる。上記の例では、


第1引数:あらかじめ抽出したソート対象の配列
第2引数:ソート方法(昇順、降順)
:(上記2つの繰り返し)
最後の引数:データ

となっている。これは時としてこんな具合にもなる


第1引数:あらかじめ抽出したソート対象の配列
第2引数:ソート方法(昇順、降順)
第3引数:ソートのフラグ(文字列として、数値として等)
:(上記3つの繰り返し)
最後の引数:データ

慣れるまでは注意が必要な関数だ。

1件のコメント

  1. masomi79 :

    参考にさせていただきました。ありがとうございます。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net