PHP实现按索引合并两个嵌套数组为指定格式的问题
解决PHP嵌套数组合并问题
问题描述
现有两个结构对应的嵌套数组:
$array1 = [ 0 => [ 'data1' => 'value1' ], 1 => [ 'data1' => 'value2' ] ]; $array2 = [ 0 => [ 'data2' => 'value1' ], 1 => [ 'data2' => 'value2' ] ];
需要将同索引的子数组合并,生成如下结果:
$arrayFinish = [ 0 => [ 'data1' => 'value1', 'data2' => 'value1' ], 1 => [ 'data1' => 'value2', 'data2' => 'value2' ] ];
原代码错误分析
你之前的代码错误在于将每个子数组作为独立元素存入新数组,而非合并键值对:
foreach ($data1 as $key=>$val) { $arrayFinish[] = [ $val, ]; foreach ($data2[$key] as $key2=>$val2) { array_push($arrayFinish[$key],['data2'=>$val2]); } }
这段代码会让$arrayFinish的每个索引下包含两个独立子数组,而非合并后的单个数组。
正确解决方案
方法1:循环合并子数组
通过遍历索引,直接合并对应位置的两个子数组:
$arrayFinish = []; foreach ($array1 as $key => $subArray) { // 合并同索引的两个子数组 $arrayFinish[$key] = array_merge($subArray, $array2[$key]); }
array_merge()会将两个数组的键值对合并,由于两个子数组的键(data1、data2)不重复,正好得到预期的结构。
方法2:使用array_map简化代码
利用array_map自动遍历两个数组的对应元素,无需手动循环:
$arrayFinish = array_map(function($a, $b) { return array_merge($a, $b); }, $array1, $array2);
该方法会将$array1和$array2的同索引元素传入回调函数,合并后返回组成新数组。
两种方法最终都会生成你需要的目标数组结构。
内容的提问来源于stack exchange,提问作者jose angarita
相关产品推荐
相关产品推荐

