如何按数组子值的计数进行分组?

时间:2012-10-31 11:47:22

标签: php arrays sorting multidimensional-array counting

我一直在尝试我能想到的array_count_valuesarray_map的所有组合。我希望你能给我指路。

这是一个示例数组:

$arr = array(
            array('name' => 'foo','score' => 1),
            array('name' => 'foo','score' => 2),
            array('name' => 'bar','score' => 1)
        );

我想将所有子值的分数组合在一起。类似于MySQL中的GROUP BY name

Array
(
    [0] => Array
        (
            [name] => foo
            [score] => 3
        )

    [1] => Array
        (
            [name] => bar
            [score] => 1
        )
)

我知道还有其他问题可以对多维数组进行排序,但是我无法找到一个在整个过程中对其中一个子值进行求和的问题。

1 个答案:

答案 0 :(得分:1)

您可以使用array_reduce

$arr = array(
        array('name' => 'foo','score' => 1),
        array('name' => 'foo','score' => 2),
        array('name' => 'bar','score' => 1));

$array = array_reduce($arr, function ($a, $b) {
    isset($a[$b['name']]['score']) ? $a[$b['name']]['score'] += $b['score'] : $a[$b['name']] = $b;
    return $a;
});

var_dump($array);

输出

array
  'foo' => 
    array
      'name' => string 'foo' (length=3)
      'score' => int 3
  'bar' => 
    array
      'name' => string 'bar' (length=3)
      'score' => int 1