合并2个数组没有重复键 [英] Merge 2 arrays with no duplicated keys

查看:121
本文介绍了合并2个数组没有重复键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个阵列像下面,并希望把它们合并起来,而不是重复键进入一个新的数组。

$ ARRAY1:

 阵列

[0] =>排列
    (
        [α] =>排列
            (
                [P] =>排列
                    (
                        [α] => 1
                    )            )        [A / S] =>排列
            (
                [P] =>排列
                    (
                        [O] => 1
                    )            )        [A / P] =>排列
            (
                [P] =>排列
                    (
                        [W] => 1
                        [E] => 1
                        并[d] => 1
                    )            )        [A / U] =>排列
            (
                [P] =>排列
                    (
                        [W] => 1
                        [E_A] => 1
                        [D_A] => 1
                    )
            )
    )

$数组2:

 阵列

[0] =>排列
    (
        [A / X] =>排列
            (
                [P] =>排列
                    (
                        [α] => 1
                    )            )        [A / S] =>排列
            (
                [P] =>排列
                    (
                        [O] => 1
                    )            )        [A / P] =>排列
            (
                [P] =>排列
                    (
                        [W] => 1
                        [E] => 1
                        并[d] => 1
                    )            )        [A / U] =>排列
            (
                [P] =>排列
                    (
                        [W] => 1
                        [E_A] => 1
                        [D_A] => 1
                    )
            )
    )

$结果= array_merge_recursive($数组1,$数组2);

$结果:

 阵列

[0] =>排列
    (
        [α] =>排列
            (
                [P] =>排列
                    (
                        [α] => 1
                    )
            )        [A / S] =>排列
            (
                [P] =>排列
                    (
                        [O] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )
                    )
            )        [A / P] =>排列
            (
                [P] =>排列
                    (
                        [W] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )                        [E] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )                        并[d] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )
                    )
            )        [A / U] =>排列
            (
                [P] =>排列
                    (
                        [W] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )                        [E_A] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )                        [D_A] =>排列
                            (
                                [0] => 1
                                [1] => 1
                            )
                    )
            )        [A / X] =>排列
            (
                [P] =>排列
                    (
                        [α] => 1
                    )
            )
    )

我怎么会去使它看起来就像这样?

 阵列

[0] =>排列
    (
        [α] =>排列
            (
                [P] =>排列
                    (
                        [α] => 1
                    )            )        [A / S] =>排列
            (
                [P] =>排列
                    (
                        [O] => 1                    )            )        [A / P] =>排列
            (
                [P] =>排列
                    (
                        [W] => 1
                        [E] => 1
                        并[d] => 1
                    )            )        [A / U] =>排列
            (
                [P] =>排列
                    (
                        [W] => 1
                        [E_A] => 1
                        [D_A] => 1
                    )
            )        [A / X] =>排列
            (
                [P] => 1
            )
    )

我要对这个错误的方式或者是有一些方法来打扫一下吗?举例欢迎!

感谢


解决方案

 函数array_merge_recursive_unique($数组1,$数组2){
  如果(空($数组1))返回$数组2; //优化基本情况  的foreach($数组2为$关键=> $值){
    如果(is_array($值)及&放大器; is_array(@ $ ARRAY1 [$键])){
      $值= array_merge_recursive_unique($数组1 [$键],$值);
    }
    $数组1 [$关键] = $价值;
  }
  返回$数组1;
}

I have 2 arrays like below and want to merge them together and not duplicate keys into a new array.

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

$result:

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
                    )
            )
    )
)

How would I go about making it look like this?

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
            )
    )
)

Am I going about this the wrong way or is there some way to clean this up? Examples welcome!

Thanks

解决方案

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个数组没有重复键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆