PHP:如何基于键匹配将Array1的值追加到Array2子数组?
解决方案:按键匹配将值追加到子数组末尾
问题原因
array_merge($Array1, $Array2) 无法得到预期结果,是因为当两个数组存在相同的字符串键时,后数组的元素会覆盖前数组的同键元素。这里Array2的99、98键对应子数组,会直接覆盖Array1中同键的单个值,自然无法实现追加到子数组的效果。
正确实现代码
通过遍历数组,针对共同键将Array1的值追加到Array2的子数组末尾:
// 定义原始数组 $Array1 = [ 99 => 99, 98 => 98 ]; $Array2 = [ 99 => [1300, 1500, 1618, 2704, 1401, 1900, 1100, 4232, 4233], 98 => [1400, 4802, 1601, 1603, 1100, 1900] ]; // 初始化最终数组为Array2的副本 $finalArray = $Array2; // 遍历并追加对应值 foreach ($finalArray as $key => &$subArray) { // 检查当前键是否存在于Array1中 if (isset($Array1[$key])) { // 将Array1的值追加到子数组末尾 $subArray[] = $Array1[$key]; } } // 输出结果 print_r($finalArray);
代码说明
- 先复制Array2到
$finalArray,保留原有子数组结构; - 使用引用
&$subArray遍历,直接修改子数组内容,避免额外赋值操作; - 通过
isset()判断共同键,确保只处理存在匹配的项; - 用
$subArray[] = ...的方式追加值,比array_push()更简洁直观。
补充说明
如果需要处理Array1中存在但Array2中没有的键(将其转为单个元素的子数组),可以在遍历后添加以下逻辑:
// 处理Array1独有的键 foreach ($Array1 as $key => $value) { if (!isset($finalArray[$key])) { $finalArray[$key] = [$value]; } }
内容的提问来源于stack exchange,提问作者uzthegeek
相关产品推荐
相关产品推荐

