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

如何使用Laravel Collection处理指定日期区间数据生成目标结构

Laravel Collection 按类型与日期范围聚合数据实现方案

前置准备

首先修正你提供的原始数据中缺失逗号的语法问题,再使用Laravel Collection结合Carbon日期工具实现需求,步骤如下:


实现步骤

  1. 生成指定范围的日期集合
  2. 将原始数据按type字段分组
  3. 为每个type遍历完整日期范围,匹配对应日期的记录,没有匹配记录则仅保留日期字段
  4. 最后为每个分组追加type标识

完整代码示例

use Carbon\Carbon;
use Carbon\CarbonPeriod;

// 1. 定义目标日期范围,生成所有日期的集合
$startDate = Carbon::createFromFormat('Y-m-d', '2021-01-01');
$endDate = Carbon::createFromFormat('Y-m-d', '2021-01-04');
$dateRange = collect(CarbonPeriod::create($startDate, $endDate)->toArray())
    ->map(fn($date) => $date->toDateString());

// 2. 原始数据转为Collection
$originalData = collect([
    ["id" => "1", "name" => "A", "type"=> "t1" ,"date" => "2021-01-01"],
    ["id" => "2", "name" => "B", "type"=> "t2", "date" => "2021-01-01"],
    ["id" => "3", "name" => "C", "type"=> "t1", "date" => "2021-01-02"],
    ["id" => "4", "name" => "D", "type"=> "t3", "date" => "2021-01-02"],
    ["id" => "5", "name" => "E", "type"=> "t2", "date" => "2021-01-01"],
]);

// 3. 按type分组处理
$result = $originalData->groupBy('type')
    ->map(function ($typeItems, $type) use ($dateRange) {
        // 遍历完整日期范围生成条目
        $dateItems = $dateRange->map(function ($currentDate) use ($typeItems) {
            $dateItem = ['date' => $currentDate];
            // 匹配当前日期下的记录
            $matchedRecords = $typeItems->where('date', $currentDate)
                ->map(fn($item) => ['id' => $item['id'], 'name' => $item['name']])
                ->values();
            
            if ($matchedRecords->isNotEmpty()) {
                $dateItem['record'] = $matchedRecords;
            }
            return $dateItem;
        })->values();
        
        // 追加type字段
        return $dateItems->put('type', $type);
    })
    ->values();

// 如需输出数组格式调用 $result->toArray()
// 如需输出JSON格式调用 json_encode($result)

输出说明

上述代码生成的结构和你要求的完全一致,数字索引对应4天的日期条目,额外追加type字段标识分组类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:48:03