0

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

这是一个示例数组:

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

我想将所有具有相同名称的子值的分数结合起来。类似于GROUP BY nameMySQL 中的东西。

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

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

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

4

1 回答 1

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
于 2012-10-31T11:55:21.910 回答