PHP多维数组合并方法及Laravel批量插入array_push报错解决
PHP多维数组合并与Laravel批量插入问题解决
让我来分别解决你的两个问题:
问题1:如何在PHP中将两个数组合并为一个多维数组?
这取决于你想要的多维数组结构,常见的两种场景如下:
场景1:将两个数组作为子数组放入新数组
如果只是想把两个独立的数组变成一个多维数组的两个元素,直接用数组字面量包裹即可:
$array1 = [1, 2, 3]; $array2 = ['a', 'b', 'c']; $multiArray = [$array1, $array2]; // 结果:[[1,2,3], ['a','b','c']]
场景2:按对应键合并为嵌套数组
如果两个数组有匹配的键,想要把对应键的值组成子数组,可以用array_map或者循环实现:
$array1 = ['name' => 'Alice', 'age' => 25]; $array2 = ['name' => 'Bob', 'age' => 30]; // 用array_map实现 $multiArray = array_map(function($val1, $val2) { return [$val1, $val2]; }, $array1, $array2); // 结果:['name' => ['Alice', 'Bob'], 'age' => [25, 30]]
问题2:Laravel批量插入时array_push报错的解决方法
你的报错array_push() expects parameter 1 to be array, int given是因为**array_push的返回值是数组的新长度(整数)**,而你把这个返回值重新赋值给了$array。第一次循环后$array就变成了整数1,第二次循环时参数1不再是数组,自然报错。
修正方案:用数组追加语法替代array_push
最简洁直观的方式是直接用$array[] = ...来追加元素,这种方式不会返回长度,而是直接修改原数组:
$code = time(); $array = []; // 推荐用短数组语法,更简洁 for ($qty = 0; $qty < $e->qty; $qty++) { $array[] = [ 'coupon_code' => $code + $qty, 'amount' => $e->amount, 'expiry_date' => $e->expiry_date, 'assigned_to' => $e->user_id, 'assigned_date' => date('Y-m-d'), 'created_by' => session('admin_id'), ]; } DB::table('coupons')->insert($array);
如果你坚持用array_push
只要不要把它的返回值赋值给原数组即可,正确用法是:
// 不要写 $array = array_push(...) array_push($array, [ // 你的数据 ]);
这样循环结束后,$array就是一个包含多个子数组的多维数组,完全符合Laravel批量插入的要求。
内容的提问来源于stack exchange,提问作者Haren Sarma
相关产品推荐
相关产品推荐

