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

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

逻辑拆解

  1. 分组标识:用price和cost拼接成唯一键,保证只有这两个值完全相同的子数组才会被分到同一组;
  2. 累加求和:遍历原数组时,如果当前组已经存在,就把days、price、cost的值分别累加;如果不存在,就把当前子数组作为新组存入;
  3. 重置索引:最后用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:45:04