【问题标题】:How to merge multidimensional arrays where only subarrays are affected?如何合并仅影响子数组的多维数组?
【发布时间】:2014-10-17 12:52:15
【问题描述】:

这里:Transforming array values in elements of a subarray using 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
    ))

非常感谢!

【问题讨论】:

    标签: php multidimensional-array array-merge arrays


    【解决方案1】:

    试试这个代码

    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]);
    }
    

    【讨论】:

    • 这段代码比我打算提出的要简洁得多!
    • 简洁是什么意思
    • 这是一个聪明的解决方案,可以回答这个问题(我赞成),但请注意,如果数组有不同的键,或者键不是以零开头的整数,或者如果键不遵循相同的顺序。
    【解决方案2】:

    试试这个:

    $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]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-18
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多