PHP中合并相同值子数组并求和的实现方法
PHP合并数组:按price和cost相同分组并求和
嗨,这个需求实现起来挺直接的,核心思路就是用price和cost的组合作为唯一标识,把相同标识的子数组归为一组,然后对每组的days、price、cost分别求和。我给你写个可直接运行的代码,再拆解下逻辑:
实现代码
<?php // 你的原始数组 $originalArray = [ ["days" => 1, "price" => 4000, "cost" => 4000], ["days" => 1, "price" => 3000, "cost" => 3000], ["days" => 1, "price" => 3000, "cost" => 3000], ]; // 初始化临时数组用来分组存储 $mergedArray = []; foreach ($originalArray as $item) { // 生成唯一键:用price和cost的组合,确保只有两者都相同时才会分到同一组 // 如果担心拼接冲突(比如特殊字符),可以改用json_encode(['price'=>$item['price'],'cost'=>$item['cost']]) $groupKey = $item['price'] . '_' . $item['cost']; if (isset($mergedArray[$groupKey])) { // 组已存在,累加对应字段的值 $mergedArray[$groupKey]['days'] += $item['days']; $mergedArray[$groupKey]['price'] += $item['price']; $mergedArray[$groupKey]['cost'] += $item['cost']; } else { // 组不存在,直接将当前子数组加入 $mergedArray[$groupKey] = $item; } } // 把关联数组转成普通索引数组,得到最终结果 $result = array_values($mergedArray); // 输出看看结果 print_r($result); ?>
逻辑拆解
- 分组标识:用
price和cost拼接成唯一键,保证只有这两个值完全相同的子数组才会被分到同一组; - 累加求和:遍历原数组时,如果当前组已经存在,就把days、price、cost的值分别累加;如果不存在,就把当前子数组作为新组存入;
- 重置索引:最后用
array_values()把关联数组转成索引数组,就得到你想要的目标格式了。
运行这段代码后,输出的结果就是你期望的数组:
array:2 [ 0 => array:3 [ "days" => 1 "price" => 4000 "cost" => 4000 ] 1 => array:3 [ "days" => 2 "price" => 6000 "cost" => 6000 ] ]
内容的提问来源于stack exchange,提问作者CodeL
相关产品推荐
相关产品推荐

