【问题标题】:Trying to merge two multidimensional arrays and preserve keys尝试合并两个多维数组并保留键
【发布时间】:2016-12-14 17:39:27
【问题描述】:

我需要合并两个“三维”数组,但我的问题是,当数组中的第一个键与另一个相同时,结果只是......不可取。

这里有一个例子:

$a = array(
        1=>array(
                -1 => array(-1=>'a: 1 -1 -1',0=>'a: 1 -1 0',1=>'a: 1 -1 1'),
                0 =>  array(-1=>'a: 1 0 -1', 0=>'a: 1 0 0', 1=>'a: 1 0 1'),
                1 =>  array(-1=>'a: 1 1 -1', 0=>'a: 1 1 0', 1=>'a: 1 1 1')
        )
);

$b = array(
        1=>array(
                1 => array(-1=>'b: 1 1 -1',0=>'b: 1 1 0',1=>'b: 1 1 1'),
                2 => array(-1=>'b: 1 2 -1',0=>'b: 1 2 0',1=>'b: 1 2 1'),
                3 => array(-1=>'b: 1 3 -1',0=>'b: 1 3 0',1=>'b: 1 3 1')
        )
);

$a + $b 的结果是:

Array
(
    [1] => Array
        (
            [-1] => Array
                (
                    [-1] => a: 1 -1 -1
                    [0] => a: 1 -1 0
                    [1] => a: 1 -1 1
                )

            [0] => Array
                (
                    [-1] => a: 1 0 -1
                    [0] => a: 1 0 0
                    [1] => a: 1 0 1
                )

            [1] => Array
                (
                    [-1] => a: 1 1 -1
                    [0] => a: 1 1 0
                    [1] => a: 1 1 1
                )

        )

)

我需要对 PHP 说,“嘿,'b' 数组中的键 [1][2][X] 和 [1][3][X] 不在 'a' 数组中,所以将它们合并到结果中”。

当所有三个键都相同时,我什至不太关心 PHP 会采用哪一个。键的值是字符串,所以我也对这些值的总和不感兴趣。而且我需要保留键,这样简单的 array_merge 就没有用了。也许我需要将它与其他功能结合起来,但我看不出是哪一个。

提前致谢。

【问题讨论】:

标签: php arrays merge sum


【解决方案1】:

你可以试试array_replace_recursive函数:

array_replace_recursive($a, $b);

输出如下:

Array
(
    [1] => Array
        (
            [-1] => Array
                (
                    [-1] => a: 1 -1 -1
                    [0] => a: 1 -1 0
                    [1] => a: 1 -1 1
                )
            [0] => Array
                (
                    [-1] => a: 1 0 -1
                    [0] => a: 1 0 0
                    [1] => a: 1 0 1
                )
            [1] => Array
                (
                    [-1] => b: 1 1 -1
                    [0] => b: 1 1 0
                    [1] => b: 1 1 1
                )
            [2] => Array
                (
                    [-1] => b: 1 2 -1
                    [0] => b: 1 2 0
                    [1] => b: 1 2 1
                )
            [3] => Array
                (
                    [-1] => b: 1 3 -1
                    [0] => b: 1 3 0
                    [1] => b: 1 3 1
                )
        )
)

这将用$b 中的值替换任何具有匹配键的条目,因此只需仔细检查这是否是您想要的结果(否则反转$a$b)。

【讨论】:

  • 完美的汤姆。那就是我要找的那个。非常感谢!
  • 没问题。祝你的项目好运。
猜你喜欢
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2011-03-14
  • 2013-07-01
相关资源
最近更新 更多