多次元配列をソートする(PHP) - Sometime PHP
たとえば、id cat order order_name という要素がある配列があったとする。
order順に配列をsortしたいときはどうしたらよいのだろうか。
<?php $arr = array(); $arr['hyaa']['id'] = 5; $arr['hyaa']['cat'] = 'umihei'; $arr['hyaa']['order'] = 1; $arr['hyaa']['order_name'] = 'hoge'; $arr['foo']['id'] = 4; $arr['foo']['cat'] = 'masuo'; $arr['foo']['order'] = 2; $arr['foo']['order_name'] = 'foo'; $arr['hoge']['id'] = 2; $arr['hoge']['cat'] = 'namihei'; $arr['hoge']['order'] = 1; $arr['hoge']['order_name'] = 'hoge'; $arr['amen']['id'] = 3; $arr['amen']['cat'] = 'andersen'; $arr['amen']['order'] = 1; $arr['amen']['order_name'] = 'hoge'; $arr['bar']['id'] = 1; $arr['bar']['cat'] = 'norisuke'; $arr['bar']['order'] = 3; $arr['bar']['order_name'] = 'bar'; print_r($arr);
Array ( [hyaa] => Array ( [id] => 5 [cat] => umihei [order] => 1 [order_name] => hoge ) [foo] => Array ( [id] => 4 [cat] => masuo [order] => 2 [order_name] => foo ) [hoge] => Array ( [id] => 2 [cat] => namihei [order] => 1 [order_name] => hoge ) [amen] => Array ( [id] => 3 [cat] => andersen [order] => 1 [order_name] => hoge ) [bar] => Array ( [id] => 1 [cat] => norisuke [order] => 3 [order_name] => bar ) )
多次元配列をソートしたいときは、array_multisortを使う。
使い方は以下の通り。
$order = array();
foreach($arr as $key => $row){
$order[$key] = $row['order'];
}
array_multisort($order, SORT_ASC ,$arr);
print_r($arr);
結果
Array ( [hoge] => Array ( [id] => 2 [cat] => namihei [order] => 1 [order_name] => hoge ) [amen] => Array ( [id] => 3 [cat] => andersen [order] => 1 [order_name] => hoge ) [hyaa] => Array ( [id] => 5 [cat] => umihei [order] => 1 [order_name] => hoge ) [foo] => Array ( [id] => 4 [cat] => masuo [order] => 2 [order_name] => foo ) [bar] => Array ( [id] => 1 [cat] => norisuke [order] => 3 [order_name] => bar ) )
orderでsortしたら、何気にid順にもsortされていた。
藁のようにsortされていた。