如何合并关联数组中重复商品规格的对应数量?(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
相关产品推荐
相关产品推荐

