You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);

两种方法最终都会得到你想要的结果:

ColorCount
Red12
Purple6

内容的提问来源于stack exchange,提问作者user4492612

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:56:26