如何以唯一元素为键合并两个PHP数组?附示例数组
PHP合并两个同外层键的多维数组
嘿,针对你这个需求——把两个以相同唯一键为外层索引的数组合并,让每个外层键下的数组包含两个原数组的所有内层元素,我给你分享几种实用的实现方式:
方法一:循环遍历合并(灵活可控)
如果需要完全掌控合并过程,或者两个数组的外层键可能不完全一致,循环遍历是最稳妥的选择:
// 定义你的两个数组 $array1 = [ 4301 => [ 'business_unit_id' => 2, 'no_of_invoices' => 1, 'invoice_status_query' => 1 ], 4501 => [ 'business_unit_id' => 1, 'no_of_invoices' => 2, 'invoice_status_query' => 0 ] ]; $array2 = [ 4301 => [ 'business_unit_id' => 2, 'PO_to_be_Approved' => 0 ], 4501 => [ 'business_unit_id' => 1, 'PO_to_be_Approved' => 0 ] ]; $mergedArray = []; // 获取所有存在的外层键,确保没有遗漏 $allKeys = array_unique(array_merge(array_keys($array1), array_keys($array2))); foreach ($allKeys as $key) { // 取出当前键对应的两个内层数组,不存在的话用空数组代替 $innerArray1 = isset($array1[$key]) ? $array1[$key] : []; $innerArray2 = isset($array2[$key]) ? $array2[$key] : []; // 合并内层数组,array_merge会保留所有键,重复键以后面的数组为准(这里business_unit_id值一致,不影响) $mergedArray[$key] = array_merge($innerArray1, $innerArray2); } // 输出结果 print_r($mergedArray);
这种方式的好处是,哪怕某个外层键只在其中一个数组里存在,也能被正确合并进去,不会丢失数据。
方法二:用内置函数快速合并(简洁高效)
如果确定两个数组的外层键完全对应,直接用PHP内置的array_replace_recursive函数就能一步到位:
$mergedArray = array_replace_recursive($array1, $array2); print_r($mergedArray);
这个函数会递归地遍历数组,把第二个数组的元素合并到第一个数组中:对于相同的外层键,会合并它们的内层数组;如果有重复的内层键(比如这里的business_unit_id),会用第二个数组的值覆盖第一个数组的(不过你这里值相同,所以结果不受影响)。
另外,也可以用array_merge_recursive,但要注意:如果遇到相同的内层键,它会把值合并成一个数组,而不是替换。比如如果两个数组的business_unit_id值不同,array_merge_recursive会把它变成['business_unit_id' => [2, 2]],这通常不是我们想要的,所以array_replace_recursive更适合你的场景。
运行后得到的目标数组会是这样:
Array ( [4301] => Array ( [business_unit_id] => 2 [no_of_invoices] => 1 [invoice_status_query] => 1 [PO_to_be_Approved] => 0 ) [4501] => Array ( [business_unit_id] => 1 [no_of_invoices] => 2 [invoice_status_query] => 0 [PO_to_be_Approved] => 0 ) )
内容的提问来源于stack exchange,提问作者phpfrek
相关产品推荐
相关产品推荐

