php 多重配列のソート
2011/05/17
一つの項目でソートしたいとき
- $arys = array(
- array( "re"=>3, "cat"=>2, "nap"=>3 ),
- array( "re"=>5, "cat"=>3, "nap"=>9 ),
- array( "re"=>9, "cat"=>2, "nap"=>2 )
- );
- foreach($arys as $k=>$v) {
- $sortA[$k] = $v["cat"];
- }
- // 昇順
- array_multisort($sortA, SORT_ASC, $arys);
- print_r($arys);
- // 出力結果
- Array(
- [0] => Array(
- [re] => 3
- [cat] => 2
- [nap] => 3
- )
- [1] => Array(
- [re] => 9
- [cat] => 2
- [nap] => 2
- )
- [2] => Array(
- [re] => 5
- [cat] => 3
- [nap] => 9
- )
- )
- // 降順は「SORT_DESC」
- array_multisort($sortA, SORT_DESC, $arys);
ソートする際、同じものだったら他のキーを判定
上記の場合、「$arys[0][‘cat’]」と「$arys[2][‘cat’]」が同じ「2」。
そのため「$arys[0][‘re’]」と「$arys[2][‘re’]」を比較・ソート。
そのため「$arys[0][‘re’]」と「$arys[2][‘re’]」を比較・ソート。
二つ以上の項目でソートしたいとき
- $arys = array(
- array( "re"=>3, "cat"=>2, "nap"=>3 ),
- array( "re"=>5, "cat"=>3, "nap"=>9 ),
- array( "re"=>9, "cat"=>2, "nap"=>2 )
- );
- foreach($arys as $k=>$v) {
- // 増やしたい項目を追加していく
- $sortA[$k] = $v["cat"];
- $sortB[$k] = $v["nap"];
- }
- // 「$sortA, SORT_ASC」と「$sortB, SORT_ASC」を引数を増やしていく
- array_multisort($sortA, SORT_ASC, $sortB, SORT_ASC, $arys);
- print_r($arys);
- // 出力結果
- Array(
- [0] => Array(
- [re] => 9
- [cat] => 2
- [nap] => 2
- )
- [1] => Array(
- [re] => 3
- [cat] => 2
- [nap] => 3
- )
- [2] => Array(
- [re] => 5
- [cat] => 3
- [nap] => 9
- )
- )