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

Laravel 5.5中array_merge()参数非数组错误求助

解决Laravel 5.5中array_merge()参数非数组的报错问题

Hey there, let's break down why you're seeing that array_merge(): Argument #1 is not an array error and fix it step by step!

错误原因分析

你代码里的核心问题出在这两个变量上:

$isConnectedM = DB::table('user_mlc_mailchimp')->where('user_id', $user_id)->get();
$isConnectedA = DB::table('user_mlc_aweber')->where('user_id', $user_id)->get();

Laravel的DB::table()->get()返回的是Collection集合对象,不是PHP原生的数组类型。而array_merge()是PHP原生函数,只能接受原生数组作为参数,直接传入集合对象就会触发这个报错。

另外还有个隐藏坑:如果$user_id为空(比如用户未登录时Auth::user()为空),$isConnectedM和$isConnectedA会处于未定义状态,执行array_merge时还会抛出未定义变量的错误。

解决方案

方案1:将Collection转为数组后合并(适配原生array_merge)

用Collection的toArray()方法把集合转成原生数组,同时提前初始化变量避免未定义问题:

public function isConnectedMA() {
    // 用可选链避免用户未登录时Auth::user()为空的报错
    $user_id = Auth::user()?->id;
    // 提前初始化空集合,确保变量始终存在
    $isConnectedM = collect();
    $isConnectedA = collect();

    if(!empty($user_id)) {
        $isConnectedM = DB::table('user_mlc_mailchimp')->where('user_id', $user_id)->get();
        $isConnectedA = DB::table('user_mlc_aweber')->where('user_id', $user_id)->get();
    }

    // 转成原生数组后执行合并
    $MergeArray = array_merge($isConnectedM->toArray(), $isConnectedA->toArray());
    $resultArray = ['status' => 1, 'message' => 'Template uploaded!', 'dataArray' => $MergeArray];
    
    // 后续逻辑...
}

方案2:直接使用Laravel Collection的merge方法(更推荐)

既然已经是Collection对象,直接用Laravel内置的集合merge()方法更符合框架开发习惯,代码也更简洁:

public function isConnectedMA() {
    $user_id = Auth::user()?->id;
    $isConnectedM = collect();
    $isConnectedA = collect();

    if(!empty($user_id)) {
        $isConnectedM = DB::table('user_mlc_mailchimp')->where('user_id', $user_id)->get();
        $isConnectedA = DB::table('user_mlc_aweber')->where('user_id', $user_id)->get();
    }

    // 直接合并两个集合
    $mergedCollection = $isConnectedM->merge($isConnectedA);
    $resultArray = ['status' => 1, 'message' => 'Template uploaded!', 'dataArray' => $mergedCollection->toArray()];
    
    // 后续逻辑...
}

额外注意点

  • 用Auth::user()?->id替代Auth::user()->id:当用户未登录时,Auth::user()会返回null,可选链操作符?->可以避免触发"Attempt to read property 'id' on null"的报错。
  • 提前初始化空集合:确保无论$user_id是否为空,$isConnectedM和$isConnectedA都有定义,不会出现未定义变量的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:12:29