Как удалить дубликаты в массиве?

Как удалить дубликаты в массиве?

Например, если у меня был следующий массив:

$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, которую вы используете)

Это работает, потому что:

  1. array_count_values будет проходить через массив и создавать индекс для каждого значения и увеличивать его каждый раз, когда он снова встретится с ним.
  2. array_filter примет созданный массив и передаст его через функцию moreThanOne определенную ранее, если он вернет false , пара ключей / значений будет удалена.
  3. 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 ) */