Функция исключения повторяющихся элементов произвольного количества массивов

Нужно создать функцию которая будет удалять повторяющиеся элементы массивов. Т.е. Есть несколько массивов, допустим [1, 2], [ 3, 4], [4, 2] Функция должна вывести массив [1, 3] Т.е. она убрала все повторяющиеся элементы Пытался сделать сам, но максимум смог убрать повторяющиеся массивы Вот код

<?php
    $archik = [[2, 3], [4, 5], [1, 6], [3, 6], [2,3]];
    echo  '<pre>';
    print_r($archik);
    echo '</pre>';

    function array_single_items($array, ...$new_array){
        $fin = array_merge($array, $new_array);
        print_r($fin);
        $fin = array_unique($fin, SORT_REGULAR);
    }

    echo  '<pre>';
    print_r(array_single_items($archik, [2,3]));
    echo '</pre>';
?>

Второй пример

?php
    $archik = [[2, 3], [4, 5], [1, 6], [3, 6], [2,3]];
    echo  '<pre>';
    print_r($archik);
    echo '</pre>';


    // function array_single_items(...$array){
    //     // array_map("unserialize", array_unique(array_map("serialize", $array)));
    //     array_unique($array, SORT_REGULAR);
    // }


    function array_unique_multidimensional($input)
    {
        $serialized = array_map('serialize', $input);
        $unique = array_unique($serialized);
        return array_intersect_key($input, $unique);
    }

    $archik = array_unique_multidimensional($archik);

    echo  '<pre>';
    print_r($archik);
    echo '</pre>';
?>

Заранее прошу прощения за такой SHITкод


Ответы (1 шт):

Автор решения: Daniel Protopopov

Сначала нужно сформировать алгоритм в голове, чтобы его можно было изложить в понятной форме. К примеру - шаг №1 = уменьшить вложенность массивов до нуля (чтобы был один единый массив); шаг №2 = для каждого числа рассчитать его количество; шаг №3 = по каждому из чисел проверить его количество - если четное - значит можно удалить это число вообще, если нечетное - значит оставить для финального результата.

<?php

$archik = [[2, 3], [4, 5], [1, 6], [3, 6], [2,3]];

// Шаг #1
$flatArray = array_reduce($archik, 'array_merge', array());

// Шаг #2
$valueCounts = array_count_values($flatArray);

// Шаг #3
$results = [];
foreach($valueCounts as $value => $count) {
    if($count % 2 == 1) {
        $results[] = $value;
    }
}

// Шаг 3.5
sort($results);

Результат: [1,3,4,5]

→ Ссылка