Как удалить дубликаты в массиве?
Например, если у меня был следующий массив:
$array = array('1','1','2','3');
Я хочу, чтобы это стало
$array = array('2','3');
поэтому я хочу, чтобы он удалил все значение, если два из них найдены
В зависимости от версии PHP это должно работать во всех версиях PHP> = 4.0.6, поскольку оно не требует анонимных функций, для которых требуется PHP> = 5.3:
function moreThanOne($val) { return $val < 2; } $a1 = array('1','1','2','3'); print_r(array_keys(array_filter(array_count_values($a1), 'moreThanOne')));
DEMO (измените версию PHP в раскрывающемся списке, чтобы выбрать версию PHP, которую вы используете)
Это работает, потому что:
array_count_values
будет проходить через массив и создавать индекс для каждого значения и увеличивать его каждый раз, когда он снова встретится с ним. array_filter
примет созданный массив и передаст его через функцию moreThanOne
определенную ранее, если он вернет false
, пара ключей / значений будет удалена. array_keys
отбрасывает часть значения массива, создавая массив со значениями, которые являются ключами, которые были определены. Этот последний шаг дает вам результат, который удаляет все значения, которые существовали более одного раза в исходном массиве. Вы можете отфильтровать их с помощью array_count_values()
:
$array = array('1','1','2','3'); $res = array_keys(array_filter(array_count_values($array), function($freq) { return $freq == 1; }));
Функция возвращает массив, содержащий исходные значения и их соответствующие частоты; вы выбираете только отдельные частоты. Конечный результат получается путем извлечения ключей.
демонстрация
Попробуйте этот код,
<?php $array = array('1','1','2','3'); foreach($array as $data){ $key= array_keys($array,$data); if(count($key)>1){ foreach($key as $key2 => $data2){ unset($array[$key2]); } } } $array=array_values($array); print_r($array); ?>
с<?php $array = array('1','1','2','3'); foreach($array as $data){ $key= array_keys($array,$data); if(count($key)>1){ foreach($key as $key2 => $data2){ unset($array[$key2]); } } } $array=array_values($array); print_r($array); ?>
Вывод
Array ( [0] => 2 [1] => 3 )
PHP предлагает так много функций массива , вам просто нужно их объединить:
$arr = array_keys(array_filter(array_count_values($arr), function($val) { return $val === 1; }));
Ссылка: array_keys
, array_filter
, array_count_values
DEMO
Удалите повторяющиеся значения из массива.
array_unique($array) $array = array(4, "4", "3", 4, 3, "3"); $result = array_unique($array); print_r($result); /* Array ( [0] => 4 [2] => 3 ) */