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

如何合并关联数组中重复商品规格的对应数量?(PHP)

代码合理性分析与优化方案

原代码存在的问题

你的这段PHP代码无法正确实现需求,主要问题有:

  • 索引混乱:array_unique处理后会保留原数组的键名(比如原数组中XL首次出现在索引0,重复项在索引2,去重后的数组键仍是0、1、3),但你用连续数字索引$i遍历,会出现索引不存在的情况(比如$i=2时,$uniqueTallesTotalesC[2]无对应值)。
  • 逻辑漏洞:条件e > i会遗漏部分重复项的累加,且最终没有移除原数量数组中重复规格对应的多余元素,导致结果数组长度不符合预期。
  • 效率低下:嵌套循环的时间复杂度为O(n*m),数组元素较多时性能会明显下降。

更优实现方案

推荐用单次遍历+关联数组统计的方式,逻辑清晰且效率更高(时间复杂度O(n)),同时能保留规格的首次出现顺序:

// 原始输入数组
$tallesTotalesC = ['XL', 'M', 'XL', 'S'];
$cantidadesTotalesC = [5, 2, 4, 7];

// 用关联数组临时存储每个规格的总数量
$sumContainer = [];
foreach ($tallesTotalesC as $idx => $talle) {
    $cantidad = $cantidadesTotalesC[$idx];
    if (isset($sumContainer[$talle])) {
        $sumContainer[$talle] += $cantidad;
    } else {
        $sumContainer[$talle] = $cantidad;
    }
}

// 提取最终结果数组
$uniqueTalles = array_keys($sumContainer);
$totalCantidades = array_values($sumContainer);

// 验证结果
print_r($uniqueTalles);      // 输出: Array ( [0] => XL [1] => M [2] => S )
print_r($totalCantidades);   // 输出: Array ( [0] => 9 [1] => 2 [2] => 7 )

这个方案通过一次遍历完成所有统计,避免了索引混乱问题,同时直接从关联数组中提取键和值,就能得到去重后的规格数组和求和后的数量数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:15