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

Laravel集合元素筛选:按startDate与code规则选取目标元素

Laravel集合筛选解决方案

需求回顾

  • 同cde且同startDate的元素,保留第一个;
  • 同cde但startDate不同的元素,保留日期最新的。

简洁实现方案

利用Laravel集合的groupBy和sortByDesc方法即可完成需求:

$filteredCollection = $originalCollection
    // 按cde字段分组,将相同cde的元素归为一组
    ->groupBy('cde')
    // 处理每个分组
    ->map(function ($group) {
        // 按startDate倒序排序,最新日期在前;同日期元素保留原集合顺序
        return $group->sortByDesc('startDate')->first();
    })
    // 重置集合键为连续索引
    ->values();

代码说明

  1. groupBy('cde'):将集合按cde字段分组,确保我们只处理相同cde下的元素;
  2. sortByDesc('startDate'):分组内按startDate倒序排列,最新的日期会排在最前面;对于startDate相同的元素,排序后会保留它们在原集合中的顺序;
  3. first():取排序后的第一个元素,既满足“同cde同startDate保留第一个”,也满足“不同startDate保留最新”的要求;
  4. values():将分组后的集合键重置为连续的数字索引,得到结构规整的最终集合。

扩展场景(若需保留同cde下不同startDate的所有元素)

如果需求是同cde下不同startDate的元素都保留,但同startDate只留第一个,可使用以下代码:

$filteredCollection = $originalCollection
    ->groupBy('cde')
    ->map(function ($group) {
        return $group
            ->sortByDesc('startDate')
            ->groupBy('startDate')
            ->map(fn($dateGroup) => $dateGroup->first())
            ->values();
    })
    ->flatten(1);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:50:41