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

如何基于日期键值将Laravel Collection与数组合并

解决方案

你之前用merge出现重复数据,是因为Laravel集合对数字键集合执行merge时,会将后续集合的元素追加到前面,而非按date字段匹配覆盖,导致同一个日期会同时存在默认值和原数据两个条目。

正确的做法是先把原集合按date字段转为键索引,再遍历目标日期数组匹配数据:

// 将原集合转为以date为键的集合,实现快速查找
$dateMap = $collection->keyBy('date');

// 遍历dates数组,匹配数据或使用默认值
$result = collect($dates)->map(function ($date) use ($dateMap) {
    // 找到对应日期的数据则用原数据,否则返回默认值
    return $dateMap->get($date, [
        'new' => 0,
        'settled' => '0',
        'date' => $date
    ]);
});

return $result;

代码说明

  1. keyBy('date'):将原集合转换为以date字段值为键的关联集合,通过get()方法可以实现O(1)时间复杂度的快速查找。
  2. map()遍历$dates数组:严格保持原日期顺序,对每个日期优先使用原集合中的数据,未匹配到则返回预设的默认值数组。

这样处理后,每个日期只会出现一次,匹配到的保留原数据,未匹配的用默认值,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:45:32