[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
30
31
32
33
34
35
36
37
38
39
<?php

$arr = array(
    array(
        'name' => 'yamada',
        'age'  => '20'
    ),
    array(
        'name' => 'satou',
        'age'  => '20'
    ),
    array(
        'name' => 'suzuki',
        'age'  => '30'
    ),
    array(
        'name' => 'tanaka',
        'age'  => '40'
    )
);


function groupArray($arr, $key) {
    $retval = array();

    foreach($arr as $value) {
        $group = $value[$key];

        if (!isset($retval[$group])) {
            $retval[$group] = array();
        }

        $retval[$group][] = $value;
    }

    return $retval;
}

var_dump(groupArray($arr, 'age'));

結果

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
30
31
32
33
34
35
36
37
38
39
array(3) {
  [20]=>
  array(2) {
    [0]=>
    array(2) {
      ["name"]=>
      string(6) "yamada"
      ["age"]=>
      string(2) "20"
    }
    [1]=>
    array(2) {
      ["name"]=>
      string(5) "satou"
      ["age"]=>
      string(2) "20"
    }
  }
  [30]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(6) "suzuki"
      ["age"]=>
      string(2) "30"
    }
  }
  [40]=>
  array(1) {
    [0]=>
    array(2) {
      ["name"]=>
      string(6) "tanaka"
      ["age"]=>
      string(2) "40"
    }
  }
}

ageキーの同じ値でグルーピングされていることが確認できます。そもそも(ry

Comments