Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Удаление дубликатов из массива

Необходимо полностью удалить повторяющиеся элементы массива. Например:
array("Красный", "Желтый", "Красный", "Белый");
Результат:
array("Желтый", "Белый");


Ответ

Хотел сделать элегантно, но не получилось :-/
$test = array("Красный", "Желтый", "Красный", "Белый"); $elCounts = array_count_values($test); $result = array();
for ($i = 0; $i < count($test); ++$i) { foreach ($elCounts as $k => $v) { if ($test[$i] == $k && $v == 1) { $result[] = $test[$i]; break; } } }
print_r($result);
array_count_values - Подсчитывает количество всех значений массива например
$array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array));
Выведет:
Array ( [1] => 2 [hello] => 2 [world] => 1 )
Зная это, проходим в цикле по основному массиву и внутри по массиву, содержащий количество вхождений. Если количество вхождений равно 1, то заносим в результирующий массив

Другой вариант через array_filter
array_filter - Фильтрует элементы массива с помощью callback-функции
$test = array("Красный", "Желтый", "Красный", "Белый"); $elCounts = array_count_values($test);
$result = array_filter($test, function($el) use ($elCounts) { foreach ($elCounts as $k => $v) { if ($el == $k && $v == 1) { return $el; } } });
sort($result); print_r($result);

Комментариев нет:

Отправить комментарий