Функция исключения повторяющихся элементов произвольного количества массивов
Нужно создать функцию которая будет удалять повторяющиеся элементы массивов. Т.е. Есть несколько массивов, допустим [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 шт):
Сначала нужно сформировать алгоритм в голове, чтобы его можно было изложить в понятной форме. К примеру - шаг №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]