[PHP] 多次元配列の複数条件ソート array_multisortの使い方

2014/04/24

PHPで多次元配列を扱うときに、複数条件でソートしたいときがあります。
MYSQLなどではよく行うことですが、Aの列で降順にしてかつBの列で昇順にしたい!!という場合です。

こういうときに便利なのが array_multisortという関数です。

使い方がちょっと特殊なので例を挙げて説明します。


以下のような2次元配列を、年・月・日でソートしたい場合を考えます。

ソート対象配列

やりたいことのイメージとしては、列で何回かソートして並び替えるけれどもそれを行ごとに並び替える、という感じです(下図参照)。
multisort

しかしそもそも、PHPの2次元配列の場合、まず行ありきで、行がさらに配列になって2次元配列を構成しています。
そこで、ソートしたい列のデータを取り出してダミー配列を作ってやります。

ダミー配列の作成

作成したダミー配列を条件によりソートして、その結果を2次元配列に反映して並べ替えてくれるのが array_multisort 関数です。

array_multisort 関数の使用

引数指定のポイントとしては、一番最後の引数にソートしたい多次元配列を指定する点です。
他の引数は、「ソートしたいダミー配列、ソート順、ソート条件」、の繰り返しとなっています。ちなみに、ソート順とソート条件とは指定場所を入れ替え可能、かつ、省略可能です。(デフォルトはそれぞれ、SORT_ASC、SORT_REGULAR、です)

こうして無事多次元配列をソートすることができました。

ソート結果

南本貴之