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

如何按共享id字段合并多个集合,将同id数据聚合为单个对象

实现方法

你之前使用的merge方法仅会将多个集合的元素直接拼接追加,不会按共享的id字段合并同id数据的字段,可按以下方式实现需求:

Laravel 集合实现(符合你当前的代码风格)

$result = $names->concat($ages)->concat($address)
    ->groupBy('id')
    ->map(fn ($groupItems) => collect($groupItems)->collapse())
    ->values();

逻辑说明:

  • 先通过concat把三个集合的所有元素汇总到同一个集合中
  • 调用groupBy('id')将所有元素按id值分组,相同id的多条数据会被归为一组
  • 对每个分组的多条数据执行collapse合并为单条数据,重复的id字段会自动覆盖(值完全相同不影响结果)
  • 最后调用values()重置集合的索引为连续数字索引,符合你预期的输出格式

原生PHP实现(不依赖集合类)

// 先把所有数组合并到一个大数组中
$allItems = array_merge($names->toArray(), $ages->toArray(), $address->toArray());
$temp = [];
foreach ($allItems as $item) {
    $id = $item['id'];
    if (!isset($temp[$id])) {
        $temp[$id] = [];
    }
    $temp[$id] = array_merge($temp[$id], $item);
}
// 重置索引得到结果
$result = array_values($temp);

两种方式最终输出的结果都和你预期的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:06:02