
今回は、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 降順



コメント