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
相关产品推荐
相关产品推荐

