【问题标题】:Merge 2 arrays with no duplicated keys合并 2 个没有重复键的数组
【发布时间】:2010-11-09 18:28:12
【问题描述】:

我有 2 个如下所示的数组,希望将它们合并在一起,而不是将键复制到新数组中。

$array1:

Array
(
[0] => Array
    (
        [a] => Array
            (
                [p] => Array
                    (
                        [a] => 1
                    )

            )

        [a/s] => Array
            (
                [p] => Array
                    (
                        [o] => 1
                    )

            )

        [a/p] => Array
            (
                [p] => Array
                    (
                        [w] => 1
                        [e] => 1
                        [d] => 1
                    )

            )

        [a/u] => Array
            (
                [p] => Array
                    (
                        [w] => 1
                        [e_a] => 1
                        [d_a] => 1
                    )
            )
    )
)

$array2:

Array
(
[0] => Array
    (
        [a/x] => Array
            (
                [p] => Array
                    (
                        [a] => 1
                    )

            )

        [a/s] => Array
            (
                [p] => Array
                    (
                        [o] => 1
                    )

            )

        [a/p] => Array
            (
                [p] => Array
                    (
                        [w] => 1
                        [e] => 1
                        [d] => 1
                    )

            )

        [a/u] => Array
            (
                [p] => Array
                    (
                        [w] => 1
                        [e_a] => 1
                        [d_a] => 1
                    )
            )
    )
)


$result = array_merge_recursive($array1, $array2);

$结果:

Array
(
[0] => Array
    (
        [a] => Array
            (
                [p] => Array
                    (
                        [a] => 1
                    )
            )

        [a/s] => Array
            (
                [p] => Array
                    (
                        [o] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )
                    )
            )

        [a/p] => Array
            (
                [p] => Array
                    (
                        [w] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )

                        [e] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )

                        [d] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )
                    )
            )

        [a/u] => Array
            (
                [p] => Array
                    (
                        [w] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )

                        [e_a] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )

                        [d_a] => Array
                            (
                                [0] => 1
                                [1] => 1
                            )
                    )
            )

        [a/x] => Array
            (
                [p] => Array
                    (
                        [a] => 1
                    )
            )
    )
)

我该如何让它看起来像这样?

Array
(
[0] => Array
    (
        [a] => Array
            (
                [p] => Array
                    (
                        [a] => 1
                    )

            )

        [a/s] => Array
            (
                [p] => Array
                    (
                        [o] => 1

                    )

            )

        [a/p] => Array
            (
                [p] => Array
                    (
                        [w] => 1
                        [e] => 1
                        [d] => 1
                    )

            )

        [a/u] => Array
            (
                [p] => Array
                    (
                        [w] => 1
                        [e_a] => 1
                        [d_a] => 1
                    )
            )

        [a/x] => Array
            (
                [p] => 1
            )
    )
)

我是不是走错了路,还是有什么办法可以解决这个问题?欢迎举例!

谢谢

【问题讨论】:

    标签: php arrays


    【解决方案1】:
    function array_merge_recursive_unique($array1, $array2) {
      if (empty($array1)) return $array2; //optimize the base case
    
      foreach ($array2 as $key => $value) {
        if (is_array($value) && is_array(@$array1[$key])) {
          $value = array_merge_recursive_unique($array1[$key], $value);
        }
        $array1[$key] = $value;
      }
      return $array1;
    }
    

    【讨论】:

      【解决方案2】:

      您是否尝试过array_merge 页面中的用户自定义示例/功能? http://php.net/manual/en/function.array-merge.php

      似乎有很多例子可能符合您的要求。保留密钥(不重新编号)的一个建议是使用 + 运算符

      $result = $x1 + $x2(其中 x 是数组)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多