Как удалить повторяющиеся значения из массива в PHP - PullRequest
138 голосов
/ 21 ноября 2008

Как я могу удалить повторяющиеся значения из массива в PHP?

Ответы [ 22 ]

222 голосов
/ 21 ноября 2008

Использовать array_unique () .

Пример:

$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
21 голосов
/ 06 декабря 2011
//Find duplicates 

$arr = array( 
    'unique', 
    'duplicate', 
    'distinct', 
    'justone', 
    'three3', 
    'duplicate', 
    'three3', 
    'three3', 
    'onlyone' 
);

$unique = array_unique($arr); 
$dupes = array_diff_key( $arr, $unique ); 
    // array( 5=>'duplicate', 6=>'three3' 7=>'three3' )

// count duplicates

array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 )
17 голосов
/ 15 февраля 2017

Использование array_values(array_unique($array));

array_unique: для уникального массива array_values: для переиндексации

6 голосов
/ 12 января 2017

Единственное, что сработало для меня:

$array = array_unique($array, SORT_REGULAR);
6 голосов
/ 13 февраля 2018
$result = array();
foreach ($array as $key => $value){
  if(!in_array($value, $result))
    $result[$key]=$value;
}
5 голосов
/ 14 мая 2011

иногда array_unique() не так, если вы хотите получить уникальные и дублированные элементы ...

$unique=array("","A1","","A2","","A1","");
$duplicated=array();

foreach($unique as $k=>$v) {

if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
 { unset($unique[$kt]);  $duplicated[]=$v; }

}

sort($unique); // optional
sort($duplicated); // optional

Результаты по

array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */

array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
2 голосов
/ 29 июня 2017

Мы можем создать такой тип массива, чтобы использовать это последнее значение, которое будет обновлено до значения столбца или ключа, и мы получим уникальное значение из массива ...

$array = array (1,3,4,2,1,7,4,9,7,5,9);
    $data=array();
    foreach($array as $value ){

        $data[$value]= $value;

    }

    array_keys($data);
    OR
    array_values($data);
2 голосов
/ 18 августа 2010

explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));

Это позаботится о связях ключей и сериализует ключи для полученного нового массива: -)

1 голос
/ 09 августа 2012

Это отличный способ сделать это. Возможно, вы захотите убедиться, что его выходные данные снова возвращают массив. Теперь вы показываете только последнее уникальное значение.

Попробуйте это:

$arrDuplicate = array ("","",1,3,"",5);

foreach (array_unique($arrDuplicate) as $v){
  if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);
1 голос
/ 25 июля 2016

В зависимости от размера вашего массива я нашел

$array = array_values( array_flip( array_flip( $array ) ) );

может быть быстрее, чем array_unique.

...