如何合并只有子数组受到影响的多维数组


How to merge multidimensional arrays where only subarrays are affected?

这里:使用PHP转换子数组元素中的数组值我问了同样的问题,但数组更平坦。我试图修改代码,但不幸的是没有成功。

我怎么能合并以下数组,这样第二个数组就不会添加在第一个数组的末尾,但第一个数组中的每个子数组都会接收第二个的子数组的相应值。换句话说,我想合并子数组。这里是我的例子:

阵列01:

Array01 (
[0] => Array
    (
        [0] => 40292633
        [1] => 412
    )
[1] => Array
    (
        [0] => 41785603
        [1] => 382
    )
[2] => Array
    (
        [0] => 48792980
        [1] => 373
    )
[3] => Array
    (
        [0] => 44741143
        [1] => 329
    ))

阵列02:

Array02(
[0] => Array
    (
        [0] => 3460581
        [1] => 1407424B1
        [2] => 951753
    )
[1] => Array
    (
        [0] => 3484251
        [1] => 1028325B1
        [2] => 159357
    )
[2] => Array
    (
        [0] => 3519102
        [1] => 0586365A1
        [2] => 456654
    )
[3] => Array
    (
        [0] => 3529714
        [1] => 1059876A1
        [2] => 852258
    ))

最终阵列:

finalArray(
[0] => Array
    (
        [0] => 40292633
        [1] => 412
        [2] => 3460581
        [3] => 1407424B1
        [4] => 951753
    )
[1] => Array
    (
        [0] => 41785603
        [1] => 382
        [2] => 3484251
        [3] => 1028325B1
        [4] => 159357
    )
[2] => Array
    (
        [0] => 48792980
        [1] => 373
        [2] => 3519102
        [3] => 0586365A1
        [4] => 456654
    )
[3] => Array
    (
        [0] => 44741143
        [1] => 329
        [2] => 3529714
        [3] => 1059876A1
        [4] => 852258
    ))

非常感谢!

尝试此代码

function merge_arrays($a1, $a2) {
        return array($a1, $a2);
}
$result = array_map("merge_arrays", $a1, $a2);
foreach($result as $nr)
{
    $nres[] = array_merge ($nr[0], $nr[1]);
}

试试这个:

$result = array();
$keys = array_unique( array_merge(array_keys($arr1), array_keys($arr2)) );
foreach($keys as $key) {
    if( !array_key_exists($key, $arr1) ) {
        $result[$key] = $arr2;
    } else if( !array_key_exists($key, $arr2) ) {
        $result[$key] = $arr1;
    } else {
        $result[$key] = array_merge($arr1[$key], $arr2[$key]);
    }
}

它并不假设两个数组都具有相同的键。

如果您想使用array_map,这是一个等效的解决方案:

$keys = array_unique( array_merge(array_keys($arr1), array_keys($arr2)) );
$result = array_map(function($key) use ($arr1,$arr2) {
                        if( !array_key_exists($key, $arr1) ) {
                            return $arr2;
                        } else if( !array_key_exists($key, $arr2) ) {
                            return $arr1;
                        }
                        return array_merge($arr1[$key], $arr2[$key]);
                    },
                    $keys);

如果你确定两个数组都有相同的密钥,你可以试试这个:

$result = array();
foreach($arr1 as $key => $arr1val) {
    $result[$key] = array_merge($arr1val, $arr2[$key]);
}