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

如何统计Laravel中分组数组数据的总条数?

Laravel分组后统计总条数的实现方法

你当前代码中groupBy操作后、调用toArray()之前拿到的是Laravel集合实例,可以直接用集合内置方法统计总条数,不需要自行遍历计算,以下是两种常用实现方案:

方案1:在集合阶段统计(推荐)

修改你的控制器代码,在分组后直接统计总条数,如果你需要同时返回分组数据和总条数可以这么写:

public function last_10_days_reports()
{
    $day_10 = Carbon::today()->subDays(10)->format('Y-m-d');
    $leadsCollection = Lead::whereDate('created_at', '>=', $day_10)
        ->get()
        ->sortBy('created_at')
        ->groupBy(function ($item) {
            return $item->created_at->format('Y-m-d');
        });
    // 统计总条数
    $totalCount = $leadsCollection->sum(fn($group) => $group->count());
    $leads = $leadsCollection->toArray();

    // 可以根据需求调整返回结构,比如同时返回总条数和分组数据
    return [
        'group_data' => $leads,
        'total_count' => $totalCount
    ];
}
  • 原理:sum方法会遍历每个日期分组,累加每个分组内的条目数得到总条数。

方案2:已转为数组后统计

如果你已经拿到了分组后的数组,也可以用PHP原生方法计算:

$totalCount = array_sum(array_map('count', $leads));
  • 原理:先用array_map获取每个分组的条目数,再用array_sum把所有分组的数量累加得到总和。

性能优化建议

如果你的leads表数据量较大,不建议先全量查询再分组,可以在SQL层面直接做分组统计,减少内存开销:

// 只统计每天的数量,不需要拉取全量数据
$dailyCounts = Lead::whereDate('created_at', '>=', $day_10)
    ->selectRaw('DATE(created_at) as date, count(*) as count')
    ->groupBy('date')
    ->orderBy('date')
    ->get();
$totalCount = $dailyCounts->sum('count');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 21:24:03