PHPで多次元連想配列のキーでソートする方法

今回は、PHPで多次元連想配列のキーでソートを行いたいと思います。
ただの配列ならsortは様々なパターンが用意されており、あまり考えることもありませんが、今回紹介するのはデータベースからデータを持ってきたときなどよく使われるパターンです。
以下のような表をわかりやすく作成しました。

ID年齢名前年数
028田中1
124佐藤2
255鈴木20
334坂田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年齢名前年数
255鈴木20
334坂田10
028田中1
124佐藤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 降順

シェアする

  • このエントリーをはてなブックマークに追加

フォローする