[PHP] usort 関数を使って 2 次元配列をソートする

作成日: 2018年04月28日

usort 関数を使うことで 2 次元配列をソートすることができます。

下記は nameage という要素を持つ配列を格納している 2 次元配列を、age 要素を基準にソートする例です。

<?php

$users = [
  ['name' => 'Tom', 'age' => 20],
  ['name' => 'Bob', 'age' => 10],
  ['name' => 'Alice', 'age' => 40],
  ['name' => 'James', 'age' => 30],
];

usort($users, function($a, $b){
  return ($a['age'] > $b['age']) ? 1 : -1;
});

var_dump($users);

usort 関数の第 2 引数に渡している無名関数では $a['age']$b['age'] を比較して、$a['age'] の方が大きい場合に 1 を返しています。このようにした場合、$usersage の昇順でソートされます。 これとは逆に、$b['age'] の方が大きい場合に 1 を返すようにした場合、$usersage の降順でソートされます。

実行すると下記の結果が得られます。

array(4) {
  [0]=>
  array(2) {
    ["name"]=>
    string(3) "Bob"
    ["age"]=>
    int(10)
  }
  [1]=>
  array(2) {
    ["name"]=>
    string(3) "Tom"
    ["age"]=>
    int(20)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(5) "James"
    ["age"]=>
    int(30)
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(5) "Alice"
    ["age"]=>
    int(40)
  }
}
PHP