You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将子数组合并到主数组?PHP嵌套数组合并问题

解决方案:对应索引合并嵌套数组

你的问题核心是将两个嵌套数组按对应索引合并子元素,而array_merge($arr1, $arr2)之所以不符合预期,是因为它会把两个数组的顶层元素直接拼接(比如主数组2个元素+子数组2个元素=4个元素),而不是把对应位置的子数组合并。

针对大数据量的性能需求,这里提供两个高效的线性时间复杂度(O(n))方案,内存占用低且执行高效:

方案一:foreach引用遍历(推荐,内存友好)

直接在原主数组上修改,不需要创建额外的大数组,适合数据量较大的场景:

$mainArray = [
    ['FirmId' => 1, 'PartyName' => 'abc medicals', 'PartyCode' => 'P001', 'SalesmanName' => ''],
    ['FirmId' => 2, 'PartyName' => 'xyz medicals', 'PartyCode' => 'P001', 'SalesmanName' => '']
];

$subArray = [
    ['SalesmanName' => 'abc'],
    ['SalesmanName' => 'xyz']
];

// 使用引用遍历,直接修改原数组元素
foreach ($mainArray as $index => &$item) {
    // 先检查子数组对应索引是否存在,避免索引越界警告
    if (isset($subArray[$index])) {
        $item = array_merge($item, $subArray[$index]);
    }
}
unset($item); // 解除引用,防止后续操作意外修改数组

print_r($mainArray);

执行后会得到你预期的结果,而且因为是直接修改原数组,内存开销极小。

方案二:array_map简洁实现

如果希望生成新数组而不修改原数组,可以用array_map,代码更简洁,性能和foreach相当:

$mergedArray = array_map(function($mainItem, $subItem) {
    // 合并对应位置的子数组,子数组的键会覆盖主数组的同名键(正好符合你的需求)
    return array_merge($mainItem, $subItem ?? []);
}, $mainArray, $subArray);

print_r($mergedArray);

这里用$subItem ?? []处理子数组比主数组短的情况,避免array_merge接收null参数报错。

关键说明

  • array_merge($a, $b)在子数组层面使用时,会将两个子数组的键合并,子数组的同名键会覆盖主数组的键,这正好符合你需要填充SalesmanName的需求。
  • 两个方案都是线性遍历,是处理这类问题的最优性能方案——因为必须遍历每个元素一次,不存在比O(n)更快的方法。

内容的提问来源于stack exchange,提问作者Juned Ansari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:14:24