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

Laravel查询生成多数组后如何合并为单个数组?已试array_merge无效

解决Laravel查询结果合并为date => value数组的问题

嘿,我来帮你搞定这个问题!首先咱们得先搞清楚你当前代码的问题所在:你现在的循环是把每个记录包装成一个单元素的子数组(比如['Match' => '2024-01-01']),然后把这些子数组塞进$array里,最后得到的是一个包含多个小数组的大数组。这时候用array_merge()会因为每个子数组的键都是Match而被覆盖,array_push()只是继续添加子数组,自然达不到你想要的效果。

方案一:直接在循环中构建目标数组

最简单的方式就是在循环时直接给$array赋值键值对,而不是嵌套子数组:

$matchs = DiraChatLog::where('status','=','Match')->whereBetween('date_access', [$request->from, $request->to])->get();
$array = []; // 先初始化空数组
foreach ($matchs as $match) {
    // 把日期作为键,status作为值直接赋值
    $array[$match->date_access] = $match->status;
}
dd($array);

这样生成的数组就是你想要的date => value结构,比如:

[
    '2024-01-01' => 'Match',
    '2024-01-02' => 'Match',
    // ... 其他匹配的日期
]

方案二:用Laravel集合的pluck()方法更优雅

既然你用的是Laravel,完全可以利用Eloquent集合的便捷方法一步到位,不需要手动循环:

$array = DiraChatLog::where('status','=','Match')
    ->whereBetween('date_access', [$request->from, $request->to])
    ->pluck('status', 'date_access') // 第一个参数是值,第二个是键
    ->toArray(); // 把集合转成普通数组
dd($array);

这个方法更简洁,Laravel会帮你自动处理键值映射,省去手动循环的代码。

注意:如果有多个记录对应同一个date_access,后面的记录会覆盖前面的。如果需要处理重复日期的场景,可以根据需求调整(比如把值改成数组,收集所有对应的status)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:18:13