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

如何合并数组中model与color匹配项并累加qty值?

合并数组中同型号同颜色项并累加数量的实现方法

嘿,这个需求在日常开发里挺常见的,我给你分享两种PHP里靠谱的实现方式,都能完美达成你的目标:

首先先明确你的原始数组:

$originalArray = [
    ['model' => 'MX555', 'color' => 'RED', 'qty' => 2],
    ['model' => 'MX555', 'color' => 'RED', 'qty' => 2],
    ['model' => 'MX555', 'color' => 'Green', 'qty' => 2],
    ['model' => 'MX555', 'color' => 'Green', 'qty' => 1],
];

方法一:利用临时数组的复合键分组累加

这是最直观高效的方式,核心思路是用model和color的组合作为唯一标识,遍历数组时做累加:

$mergedArray = [];

foreach ($originalArray as $item) {
    // 用model+特殊分隔符+color生成唯一键,避免重复
    $key = $item['model'] . '|' . $item['color'];
    
    if (isset($mergedArray[$key])) {
        // 已存在则累加数量
        $mergedArray[$key]['qty'] += $item['qty'];
    } else {
        // 不存在则直接存入临时数组
        $mergedArray[$key] = $item;
    }
}

// 把关联数组转为索引数组,得到目标格式
$mergedArray = array_values($mergedArray);

print_r($mergedArray);

这里我用|作为分隔符,比下划线更安全——如果你的model或color本身包含下划线,用下划线会导致键冲突,|一般不会出现在这类字段里,当然你也可以用serialize([$item['model'], $item['color']])来生成绝对唯一的键。

方法二:使用array_reduce进行函数式聚合

如果你更喜欢函数式编程的写法,array_reduce是个不错的选择,逻辑和第一种方法一致,但代码更简洁:

$mergedArray = array_reduce($originalArray, function($carry, $item) {
    $key = $item['model'] . '|' . $item['color'];
    
    if (isset($carry[$key])) {
        $carry[$key]['qty'] += $item['qty'];
    } else {
        $carry[$key] = $item;
    }
    
    return $carry;
}, []);

// 同样转成索引数组
$mergedArray = array_values($mergedArray);

print_r($mergedArray);

array_reduce会迭代原始数组,把每一项逐步合并到$carry(也就是我们的临时数组)里,最后返回合并后的结果。

两种方法运行后都会得到正确的合并数组:

Array ( 
    [0] => Array ( [model] => MX555 [color] => RED [qty] => 4 ) 
    [1] => Array ( [model] => MX555 [color] => Green [qty] => 3 ) 
)

哦对了,你目标里Green的qty写的是4,但原始数组里是2+1=3,应该是笔误吧?代码里会正确计算成3哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:49:09