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

如何合并两个Laravel集合并按同名字段累加对应属性值

Laravel集合按name字段匹配累加score实现方案

实现代码

use Illuminate\Support\Collection;

// 初始化两个集合,若你已有对应集合实例可跳过该步骤
$collection1 = collect([
    ['name' => 'aaa', 'score' => 10],
    ['name' => 'bbb', 'score' => 20],
]);
$collection2 = collect([
    ['name' => 'aaa', 'score' => 30],
    ['name' => 'bbb', 'score' => 10],
]);

$collection3 = $collection1
    // 拼接两个集合所有元素,替代merge避免出现同索引元素覆盖的问题
    ->concat($collection2)
    // 按name字段分组,相同name的元素会被归到同一分组
    ->groupBy('name')
    // 遍历每个分组计算score累加值,重组为目标结构
    ->map(function (Collection $group) {
        return [
            'name' => $group->first()['name'],
            'score' => $group->sum('score')
        ];
    })
    // 重置为连续数字索引,得到和需求一致的结构
    ->values();

补充说明

  • 若你的集合元素是对象格式,只需将$group->first()['name']修改为$group->first()->name即可,sum('score')方法同时支持数组和对象格式的元素字段求和
  • 该方案也支持两个集合存在不对称name的场景,比如$collection1存在name为ccc的元素、$collection2不存在,也会自动统计对应的score值

内容的提问来源于stack exchange,提问作者Rachid L'harime

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:07