【PHP基礎】多次元配列を任意の値で並び替える方法【初心者向け】
普通の配列は並び替えたことがあるけど、多次元配列だとどうなんだろう?こんな疑問に答えます。
コードを公開しながら解説していますので、PHPを勉強中の方や独学中の方は参考にどうぞ。
一次元の配列を並び替えるのは簡単だけど、多次元配列の二次元値で並び替える時はどうすればいいか。
そんな時はarray_multisort関数を使えば簡単です。
百聞は一見に如かず、サンプルコードを見てみましょう。
サンプルコードは初心者にもわかりやすいよう冗長なものとなっています、ご容赦ください。
多次元連想配列の並び替え方
例えばこんな二次元連想配列があったとします
// 配列を用意
$array = [];
// 配列に値を格納
$array[] = array('id' => 'd-1','age' => 30,'name' => '山田');
$array[] = array('id' => 'a-2','age' => 20,'name' => '田中');
$array[] = array('id' => 'b-1','age' => 40,'name' => '鈴木');
$array[] = array('id' => 'c-1','age' => 10,'name' => '後藤');
$array[] = array('id' => 'a-1','age' => 50,'name' => '橋本');
この配列の二次元のキーを使って並び替えたいと思います。
まずはidを使ってアルファベット順に並び替えたいと思います。
idで並び替える(アルファベット順)
並び替えるためにソート用の配列を用意する必要があります、下記のようにしましょう。
foreach ($array as $key => $value) {
$sort[$key] = $value['id'];
}
idで並びかえるので$valueのキーは’id’にします
用意したソート用の配列と対象の配列を使って、並び替えを行います。
ここでarray_multisort関数の出番です。
array_multisort($sort, SORT_ASC, $array);
第一引数にソート用の配列を、第二引数にソートの種類を指定、第三引数に並び替えたい配列を指定してあげるだけでOKです。
SORT_ASCをSORT_DESCにすることで降順でソートすることも可能です、今回は昇順でいきましょう。
出力して確認
foreach ($array as $key => $value) {
echo $value['id'].':'.$value['name'].'
';
}
出力結果を比較
比較してみるとidを基準にソートされていることがわかります。
最後にageキーで並び替えてみます。
数字で並び替え(大きさ)
手順はさきほどと同じです。
ソート用配列のキーを指定し直します。
foreach ($array as $key => $value) {
$sort[$key] = $value['age'];
}
並び替え処理をして
array_multisort($sort, SORT_ASC, $array);
出力して確認
foreach ($array as $key => $value) {
echo $value['age'].':'.$value['name'].'
';
}
出力結果を比較
ageを基準にソートされている事がわかります。
処理をまとめるとこんな感じ
// 配列を用意
$array = [];
// 配列に値を格納
$array[] = array('id' => 'd-1','age' => 30,'name' => '山田');
$array[] = array('id' => 'a-2','age' => 20,'name' => '田中');
$array[] = array('id' => 'b-1','age' => 40,'name' => '鈴木');
$array[] = array('id' => 'c-1','age' => 10,'name' => '後藤');
$array[] = array('id' => 'a-1','age' => 50,'name' => '橋本');
// ソート用の配列を用意
foreach ($array as $key => $value) {
$sort[$key] = $value['age'];
}
// ソート用配列と対象の配列を使って
// array_multisort関数で並び替えを実行
array_multisort($sort, SORT_ASC, $array);
// 出力して確認
foreach ($array as $key => $value) {
echo $value['age'].':'.$value['name'].'<br>';
}
簡単ですね。
終わりに
array_multisort関数を使うことで多次元連想配列でも並び替えできることがわかりました。
キーを指定して並び替えることもPHPを扱う職場ではちょくちょくあるので、覚えておいて損はないと思います。
以上になります。
Twitterでも情報や経過を発信していますのでフォローよろしくお願いします。
不明点やアドバイスなどありましたら、コメントかTwitterからお願いします。