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

在Laravel 10/PHP 8.2中使用collapse合并数组失败,如何正确收集循环查询数据到单个数组?

在Laravel 10/PHP 8.2中使用collapse合并数组失败,如何正确收集循环查询数据到单个数组?

我来帮你分析下问题出在哪,以及怎么解决~

你现在用Arr::collapse()的方式不对哦,这个方法要求传入一个包含多个数组的数组,但你每次调用时把当前的$data和新查询到的数组作为两个独立参数传进去,这不符合它的参数规则,所以才会合并失败,最后得到空数组。

给你几个正确的实现方式,你可以根据需求选:

  • 方法一:先攒数组再一次性合并
    先把每次查询的结果数组都放到一个大数组里,最后用Arr::collapse()合并成一维数组:

    $data = [];
    foreach ($yourParameterList as $someParameter) {
        // 把每次的查询结果数组添加到大数组中
        $data[] = $query->where('some_field', $someParameter)->get()->toArray();
    }
    // 最后一次性合并所有子数组
    $finalData = Arr::collapse($data);
    
  • 方法二:循环中直接合并数组
    用array_merge()每次把新数据合并到已有数组里,写法更直接:

    $data = [];
    foreach ($yourParameterList as $someParameter) {
        $newItems = $query->where('some_field', $someParameter)->get()->toArray();
        $data = array_merge($data, $newItems);
    }
    // 此时$data就是合并后的一维数组
    
  • 方法三:用Laravel集合的concat方法(更优雅)
    利用Laravel集合的链式操作,每次追加查询结果集合,最后转成数组:

    $resultCollection = collect();
    foreach ($yourParameterList as $someParameter) {
        $resultCollection = $resultCollection->concat($query->where('some_field', $someParameter)->get());
    }
    $finalData = $resultCollection->toArray();
    

另外还要提个优化点:如果你的这些$someParameter是一个数组的话,完全可以不用循环查询,直接用whereIn来一次查询出所有数据,性能会好很多,比如:

// 假设$yourParameters是包含所有参数的数组
$finalData = $query->whereIn('some_field', $yourParameters)->get()->toArray();

备注:内容来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:50:27