Объединить многомерный массив (рекурсивный), но пропустить повторяющиеся значения в PHP - PullRequest
0 голосов
/ 12 октября 2018

У меня есть два многомерных массива, которые я хочу объединить, но я хочу пропустить те же значения во время объединения.Я пробовал несколько разных способов, которые я нахожу в сети, но в моем случае мне ничего не помогло.

Мой начальный массив намного больше этого, но здесь я просто привел пример:

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

И еще один, который я хочу объединить с первым:

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

print_r из array_merge_recurisive, используя такой метод: 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, но мне нужно только одно

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Следующая функция рекурсивно удалит повторяющиеся значения для массива (правка: только для неассоциативных ключей ):

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.

0 голосов
/ 12 октября 2018

Вы можете попробовать это

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

...