PHP中按颜色对数组项求和并生成新数组的实现方法
按颜色汇总Count总和的正确解法及问题分析
嘿,我来帮你理清楚问题出在哪~你之前写的代码逻辑完全跑偏啦!array_sum(array_map( function($item) { return $item['color']; }, $items) );里,array_map会返回一个全是颜色字符串的数组(比如['Red', 'Purple', 'Red']),而array_sum是用来计算数值总和的,遇到字符串会直接被PHP解析成0,这行代码根本没法实现按颜色汇总count的需求。
你需要的核心逻辑是:把每个颜色作为唯一标识,累加对应条目的count值,下面给你两种常用的实现方式:
方法一:foreach循环(直观易懂)
这是最容易理解的方式,遍历原数组逐个累加同颜色的count:
// 你的原始数组 $originalArray = [ ['color' => 'Red', 'count' => 6], ['color' => 'Purple', 'count' => 6], ['color' => 'Red', 'count' => 6] ]; $summedData = []; foreach ($originalArray as $item) { $color = $item['color']; // 如果这个颜色已在汇总数组里就累加count,否则初始化 if (isset($summedData[$color])) { $summedData[$color] += $item['count']; } else { $summedData[$color] = $item['count']; } } // 转换成和你预期一致的二维数组格式 $resultArray = []; foreach ($summedData as $color => $totalCount) { $resultArray[] = ['color' => $color, 'count' => $totalCount]; } print_r($resultArray);
方法二:array_reduce(函数式风格)
如果你更喜欢用PHP数组函数实现,可以用array_reduce完成累加:
$originalArray = [ ['color' => 'Red', 'count' => 6], ['color' => 'Purple', 'count' => 6], ['color' => 'Red', 'count' => 6] ]; // 先汇总成「颜色为键、总count为值」的数组 $summedData = array_reduce($originalArray, function($carry, $item) { $color = $item['color']; // 用null合并运算符简化判断,不存在就取0再累加 $carry[$color] = ($carry[$color] ?? 0) + $item['count']; return $carry; }, []); // 转换成目标二维数组格式 $resultArray = array_map(function($count, $color) { return ['color' => $color, 'count' => $count]; }, $summedData, array_keys($summedData)); print_r($resultArray);
两种方法最终都会得到你想要的结果:
| Color | Count |
|---|---|
| Red | 12 |
| Purple | 6 |
内容的提问来源于stack exchange,提问作者user4492612
相关产品推荐
相关产品推荐

