分かりやすく、使いやすく。

二次元配列を複数のキーを指定して並べ替える方法

スポンサーリンク

PHP で多次元配列のソートを行うには array_multisort を使用します。 array_multisort では、連想配列の複数のキーの値をソートキーとして指定することができます。

サンプルコードは次の通りです。

php(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 配列を作成
$ary_member_info = 
    array(
        0 => ['id'=>'A08', 'name'=>'太郎',   'age'=>20, 'team'=>'C'],
        1 => ['id'=>'005', 'name'=>'花子',   'age'=>52, 'team'=>'A'],
        2 => ['id'=>'C35', 'name'=>'ジョン', 'age'=>26, 'team'=>'B'],
        3 => ['id'=>'018', 'name'=>'ケン',   'age'=>9,  'team'=>'B'],
        4 => ['id'=>'K11', 'name'=>'三太夫', 'age'=>79, 'team'=>'A'],
        5 => ['id'=>'711', 'name'=>'五郎',   'age'=>20, 'team'=>'C'],
    );
 
//並べ替えのキー(ソートキー)とする項目を配列として取り出す
$sort_key_team = array_column($ary_member_info, 'team');
$sort_key_age  = array_column($ary_member_info, 'age');
$sort_key_id   = array_column($ary_member_info, 'id');
 
//次の通りソートキーを指定して二次元配列を並び替える。
//第一ソートキー:team(文字列の降順で並び替え)
//第二ソートキー:age (数値の昇順で並び替え)
//第三ソートキー:id  (文字列の昇順で並び替え)
array_multisort(
        $sort_key_team, SORT_DESC, SORT_STRING, 
        $sort_key_age,  SORT_ASC, SORT_NUMERIC, 
        $sort_key_id,   SORT_ASC, SORT_STRING, 
        $ary_member_info
    );
 
//中身を確認
var_export($ary_member_info); 

上記の実行結果は次の通りです。

array (
  0 =>
  array (
    'id' => '711',
    'name' => '五郎',
    'age' => 20,
    'team' => 'C',
  ),
  1 =>
  array (
    'id' => 'A08',
    'name' => '太郎',
    'age' => 20,
    'team' => 'C',
  ),
  2 =>
  array (
    'id' => '018',
    'name' => 'ケン',
    'age' => 9,
    'team' => 'B',
  ),
  3 =>
  array (
    'id' => 'C35',
    'name' => 'ジョン',
    'age' => 26,
    'team' => 'B',
  ),
  4 =>
  array (
    'id' => '005',
    'name' => '花子',
    'age' => 52,
    'team' => 'A',
  ),
  5 =>
  array (
    'id' => 'K11',
    'name' => '三太夫',
    'age' => 79,
    'team' => 'A',
  ),
) 

単一のキーで並べ替える場合のサンプルコードについては 二次元配列をソートキーを指定して並び替える方法 を参照してください。

スポンサーリンク
スポンサーリンク