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

Laravel中如何遍历集合并按user_id聚合统计ID数量

问题描述

现有如下Laravel集合结构:

#items: array:4 [▼
0 => Collection {#465 ▼
  #items: array:2 [▼
    "id" => 1
    "user_id" => 5
  ]
}
1 => Collection {#455 ▼
  #items: array:2 [▼
    "id" => 2
    "user_id" => 5
  ]
}
2 => Collection {#419 ▼
  #items: array:2 [▼
    "id" => 3
    "user_id" => 1
  ]
}
3 => Collection {#410 ▼
  #items: array:2 [▼
    "id" => 4
    "user_id" => 1
  ]
}
]

需要将其聚合为按user_id统计对应ID数量的集合,目标结构如下:

#items: array:2 [▼
0 => Collection {#465 ▼
  #items: array:2 [▼
    "user_id" => 1
    "count" => 2
  ]
}
1 => Collection {#455 ▼
  #items: array:2 [▼
    "user_id" => 5
    "count" => 2
  ]
}
]
实现方案

利用Laravel集合的链式方法即可完成聚合,示例代码如下:

$result = $originalCollection
    // 按user_id字段分组
    ->groupBy(fn ($item) => $item->get('user_id'))
    // 生成统计结构,每个分组转为包含user_id和count的子集合
    ->map(fn ($group, $userId) => collect([
        'user_id' => $userId,
        'count' => $group->count()
    ]))
    // 转为索引数组形式的集合,匹配目标结构的外层格式
    ->values();

代码说明

  • groupBy:根据每个子集合的user_id值进行分组,得到以user_id为键、对应子集合集合为值的关联集合
  • map:遍历每个分组,统计该组元素数量,生成包含user_id和count的新子集合
  • values:将关联集合转为索引集合,对应目标结构的外层数组形式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:50:23