合并多维数组(递归),但跳过PHP中的重复值

时间:2018-10-12 07:16:36

标签: php arrays recursion array-merge

我有两个要合并的多维数组,但我想在合并过程中跳过相同的值。我尝试了几种在网络上找到的不同方法,但是对我而言,没有任何帮助。

我的初始数组比这个数组大得多,但是在这里我举个例子:

$array1 = [
    "aaa" => [
        "aa1"=> [
            "key1"=> "value1",
            "key2"=> "value2",
        ],
        "bbb"=> [
            "bb1",
            "bb2",
        ],
        "ccc"=> [
            "cc1",
        ],
    ],
    "ooo" => [
        "oo1"
    ]
];

另外一个,我想在第一个合并:

$array2 = [
    "aaa" => [
        "bbb"=> [
            "bb2",
        ],
        "ccc"=> [
            "cc2",
        ],
    ],
];
array_merge_recurisive的

print_r,使用如下方法: print_r(array_merge_recursive($array1, $array2));

Array
(
    [aaa] => Array
        (
            [aa1] => Array
                (
                    [key1] => value1
                    [key2] => value2
                )

            [bbb] => Array
                (
                    [0] => bb1
                    [1] => bb2
                    [2] => bb2
                )

            [ccc] => Array
                (
                    [0] => cc1
                    [1] => cc2
                )

        )

    [ooo] => Array
        (
            [0] => oo1
        )

)

因此,结果如您所见,数组bbb具有两个bb2值,但我只需要一个

3 个答案:

答案 0 :(得分:2)

以下函数将递归删除数组的重复值(编辑:仅用于非关联键):

function array_unique_recursive(array $arr) {
  if (array_keys($arr) === range(0, count($arr) - 1)) {
    $arr = array_unique($arr, SORT_REGULAR);
  }

  foreach ($arr as $key => $item) {
    if (is_array($item)) {
      $arr[$key] = array_unique_recursive($item);
    }
  }

  return $arr;
}

您可以在array_merge_recursive之后调用它。

答案 1 :(得分:0)

您可以尝试

array_unique(array_merge_recursive($ array1,$ array2),SORT_REGULAR);

答案 2 :(得分:0)

使用array_replace_recursive代替array_merge_recursive