【PHP】多次元配列を奥のほうの値で並べ替える方法
1次元の配列のソートはasort関数等で行うことが可能ですが、2次元配列以上を並べ替えたい場合はarray_multisortを使うととても便利です。

array_multisort関数
以下のような配列があります。
配列名を$brothersとします。
array(3) {
[0]=>
array(2) {
["name"]=>
string(12) "いちろう"
["age"]=>
string(1) "5"
}
[1]=>
array(2) {
["name"]=>
string(12) "さぶろう"
["age"]=>
string(1) "3"
}
[2]=>
array(2) {
["name"]=>
string(9) "じろう"
["age"]=>
string(1) "4"
}
}
$brothersを年齢昇順に並べ替えたい場合は以下のようにします。
まず$brothersから年齢だけを取り出した配列$ageをつくります。
foreach ($brothers as $row) {
$age[] = $row['age'];
}
そしてarray_multisortの出番です。
array_multisort($age,SORT_ASC,$brothers);
$ageを昇順にソートしてついでに$brothersも同じ順番に入れ替えるようなイメージです。
これで以下のように$brothersがソートされ、上書きされます。
array(3) {
[0]=>
array(2) {
["name"]=>
string(12) "さぶろう"
["age"]=>
string(1) "3"
}
[1]=>
array(2) {
["name"]=>
string(9) "じろう"
["age"]=>
string(1) "4"
}
[2]=>
array(2) {
["name"]=>
string(12) "いちろう"
["age"]=>
string(1) "5"
}
}
今まで面倒くさい手順を取っていましたが、こんなに便利な関数があったのですね・・・
array_multisortを使いこなすことで、配列をより強力に扱えるようになると思います。

コメントを残す