Необходимо полностью удалить повторяющиеся элементы массива.
Например:
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);
Комментариев нет:
Отправить комментарий