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

PHP Laravel中如何以指定列为参照跨集合累加quantity字段值

Laravel 集合匹配累加实现方案

直接用Laravel集合提供的原生方法即可实现,不需要写嵌套循环,同时能保证大数量下的执行效率,且完整保留第一个集合的原有结构与字段。

实现思路

  • 先将第二个集合处理成「关联ID => 待累加数量」的键值映射,查找匹配项时直接按键读取,时间复杂度为O(1),远高于嵌套循环/每次遍历查找的效率
  • 遍历第一个集合的每个元素,按id匹配映射中的待累加值,匹配到则做数值累加,未匹配到保留原数值
  • 处理过程中不修改元素原有其他字段,兼容集合元素为数组/标准对象两种格式,最终输出结构和原第一个集合完全一致

可直接使用的代码

假设你持有的两个集合变量名为$firstCollection、$secondCollection(若当前是普通PHP数组,用collect(数组变量)转为Laravel集合即可):

// 生成第二个集合的reference => quantity 键值映射
$additionMap = $secondCollection->pluck('quantity', 'reference');

// 遍历处理第一个集合
$result = $firstCollection->map(function ($item) use ($additionMap) {
    // 兼容元素是数组/对象两种格式,不破坏原结构
    $current = is_array($item) ? $item : (array)$item;
    $matchId = $current['id'];
    
    if ($additionMap->has($matchId)) {
        // 强制转数值相加避免字符串拼接bug,计算完转回字符串和原字段类型一致
        $current['quantity'] = (string)(
            intval($current['quantity']) + intval($additionMap->get($matchId))
        );
    }

    return is_object($item) ? (object)$current : $current;
});

效果说明

执行后$result就是你需要的最终结果:

  • id为1的元素quantity从100累加80变为180,name字段保留
  • id为2的元素quantity从200累加50变为250,codProd字段保留
  • id为3的元素无匹配项,quantity保持30不变,name字段保留
    和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:36:27