如何合并数组?array_merge失效,Laravel场景下数组合并需求问询
解决数组子数组合并问题
嘿,我来帮你搞定这个问题~ 你现在遇到的问题根源在于:你循环生成的$array是一个二维数组,每个元素都是独立的单键值对数组(比如[['2024-05-01' => 'Match'], ['2024-05-02' => 'Match']]),而直接调用array_merge($array)是无效的——因为array_merge需要接收多个数组作为参数,而不是一个包含数组的数组。
下面给你几种简单有效的解决方案:
方法一:循环时直接构建一维数组(最推荐)
其实根本不需要先生成二维数组再合并,直接在循环里把键值对放到一维数组里就好,一步到位:
$matchs = DiraChatLog::where('status','=','Match')->whereBetween('date_access', [$request->from, $request->to])->get(); $array = []; // 先初始化空数组 foreach ($matchs as $match) { // 直接将date_access作为键,status作为值存入一维数组 $array[$match->date_access] = $match->status; } dd($array);
方法二:用Laravel集合快速合并(已有二维数组时)
如果你已经生成了那个二维的$array,可以用Laravel自带的集合工具来快速合并:
// 把二维数组转成集合,用collapse()展开成一维,再转回普通数组 $mergedArray = collect($array)->collapse()->toArray(); dd($mergedArray);
collapse()方法专门用来将多维数组展开为一维,完美适配你的场景。
方法三:原生PHP的array_merge配合展开运算符
如果你想用纯PHP的方式,可以用展开运算符把二维数组的每个子数组拆成array_merge的参数:
// 用...展开$array里的每个子数组,作为array_merge的多个参数 $mergedArray = array_merge(...$array); dd($mergedArray);
注意:如果你的PHP版本低于7.4,展开运算符不支持,这时候可以用call_user_func_array替代:
$mergedArray = call_user_func_array('array_merge', $array); dd($mergedArray);
额外提醒
如果多个子数组存在相同的date_access键,后面的元素会覆盖前面的,这是所有合并方法的默认行为,需要你留意这一点哦~
内容的提问来源于stack exchange,提问作者Rajveer Singh
相关产品推荐
相关产品推荐

