今回は、PHPで多次元連想配列のキーでソートを行いたいと思います。
ただの配列ならsortは様々なパターンが用意されており、あまり考えることもありませんが、今回紹介するのはデータベースからデータを持ってきたときなどよく使われるパターンです。
以下のような表をわかりやすく作成しました。
ID | 年齢 | 名前 | 年数 | |
0 | 28 | 田中 | 1 | |
1 | 24 | 佐藤 | 2 | |
2 | 55 | 鈴木 | 20 | |
3 | 34 | 坂田 | 10 |
左から社員ID,年齢,名前,勤続年数とします。以前は以下のように行っていました。
$array = array( array( 'id' => 0, 'age' => 28, 'name' => '田中', 'Length' => '1' ), array( 'id' => 1, 'age' => 24, 'name' => '佐藤', 'Length' => '2' ), array( 'id' => 2, 'age' => 55, 'name' => '鈴木', 'Length' => '20' ), array( 'id' => 3, 'age' => 34, 'name' => '坂田', 'Length' => '10' ), ); print_r($array); foreach ((array) $array as $key => $value) { $sort[$key] = $value['age']; } echo "<br>"; array_multisort($sort, SORT_DESC, $array); print_r($array);
結果は以下のようになります。
ID | 年齢 | 名前 | 年数 | |
2 | 55 | 鈴木 | 20 | |
3 | 34 | 坂田 | 10 | |
0 | 28 | 田中 | 1 | |
1 | 24 | 佐藤 | 2 |
PHP5.5以降からは30行目から34行目を省略して以下のようにすればシンプルにソートできます。
array_multisort(array_column($array, 'age'), SORT_DESC, $array);
ageのところにソートしたいキーを指定しています。”Length”と指定すると勤続年数が長い順にソートできます。 鈴木>坂田>佐藤>田中の順になります。
array_multisort(array_column($array, 'Length'), SORT_DESC, $array);
今回は第二引数に”SORT_DESC”を指定しましたが年齢が若い順にしたい場合、”SORT_ASC”を指定します。
SORT_ASC
昇順SORT_DESC
降順
コメント