我一直在尝试我能想到的array_count_values
和array_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
)
)
我知道还有其他问题可以对多维数组进行排序,但是我无法找到一个在整个过程中对其中一个子值进行求和的问题。
答案 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