PHPで多次元配列を扱うときに、複数条件でソートしたいときがあります。
 MYSQLなどではよく行うことですが、Aの列で降順にしてかつBの列で昇順にしたい!!という場合です。
こういうときに便利なのが array_multisortという関数です。
使い方がちょっと特殊なので例を挙げて説明します。
以下のような2次元配列を、年・月・日でソートしたい場合を考えます。
ソート対象配列
| 1 2 3 4 5 6 7 8 9 | $array_data =   array(     array( "year" => "2014", "month" => "04", "day" => "24", "place" => "徳島" ),     array( "year" => "2014", "month" => "4" , "day" => "23", "place" => "香川" ),     array( "year" => "2014", "month" => "04", "day" => "25", "place" => "高知" ),     array( "year" => "2013", "month" => "05", "day" => "05", "place" => "愛媛" )   ); | 
やりたいことのイメージとしては、列で何回かソートして並び替えるけれどもそれを行ごとに並び替える、という感じです(下図参照)。
 
しかしそもそも、PHPの2次元配列の場合、まず行ありきで、行がさらに配列になって2次元配列を構成しています。
 そこで、ソートしたい列のデータを取り出してダミー配列を作ってやります。
ダミー配列の作成
| 1 2 3 4 5 6 7 | foreach( $array_data as $key => $row ) {   $tmp_year_array[$key] = $row["year"];   $tmp_month_array[$key] = $row["month"];   $tmp_day_array[$key] = $row["day"]; } | 
作成したダミー配列を条件によりソートして、その結果を2次元配列に反映して並べ替えてくれるのが array_multisort 関数です。
array_multisort 関数の使用
| 1 2 3 4 5 6 | array_multisort( $tmp_year_array,                  $tmp_month_array, SORT_ASC, SORT_NUMERIC,                  $tmp_day_array, SORT_ASC,                  $array_data ); | 
引数指定のポイントとしては、一番最後の引数にソートしたい多次元配列を指定する点です。
 他の引数は、「ソートしたいダミー配列、ソート順、ソート条件」、の繰り返しとなっています。ちなみに、ソート順とソート条件とは指定場所を入れ替え可能、かつ、省略可能です。(デフォルトはそれぞれ、SORT_ASC、SORT_REGULAR、です)
こうして無事多次元配列をソートすることができました。
ソート結果
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | Array (     [0] => Array         (             [year] => 2013             [month] => 05             [day] => 05             [place] => 愛媛         )     [1] => Array         (             [year] => 2014             [month] => 4             [day] => 23             [place] => 香川         )     [2] => Array         (             [year] => 2014             [month] => 04             [day] => 24             [place] => 徳島         )     [3] => Array         (             [year] => 2014             [month] => 04             [day] => 25             [place] => 高知         ) ) | 
南本貴之
 
  
 





