20 ответов:
использовать array_unique ().
пример:
$array = array(1, 2, 2, 3); $array = array_unique($array); // Array is now (1, 2, 3)
//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 )
использовать
array_values(array_unique($array));
array_unique: для уникального массиваarray_values: для переиндексации
иногда
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 */
$result = array(); foreach ($array as $key => $value){ if(!in_array($value, $result)) $result[$key]=$value; }
explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));Это позаботится о ключевых ассоциациях и сериализации ключей для результирующего нового массива : -)
мы можем создать такой тип массива, чтобы использовать это последнее значение будет обновляться в столбец или значение ключа и мы получим уникальное значение из массива...
$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);
это отличный способ сделать это. Возможно, вы захотите убедиться, что его вывод снова является массивом. Теперь вы показываете только последнее уникальное значение.
попробуйте это:
$arrDuplicate = array ("","",1,3,"",5); foreach (array_unique($arrDuplicate) as $v){ if($v != "") { $arrRemoved[] = $v; } } print_r ($arrRemoved);
в зависимости от размера вашего массива, я нашел
$array = array_values( array_flip( array_flip( $array ) ) );может быть быстрее, чем array_unique.
if (@!in_array($classified->category,$arr)){ $arr[] = $classified->category; ?> <?php } endwhile; wp_reset_query(); ?>первый раз проверить значение в массиве и найти такое же значение игнорировать его
удалить повторяющиеся значения из ассоциативного массива в PHP.
$arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' ); foreach($arrDup as $k => $v){ if(!( isset ($hold[$v]))) $hold[$v]=1; else unset($arrDup[$k]); }Array ([0] => aaa-aaa [1] => 12/1/1 [2] => 1.15 )
$arrDuplicate = array ("","",1,3,"",5); foreach(array_unique($arrDuplicate) as $v){ if($v != "" ){$arrRemoved = $v; }} print_r($arrRemoved);
function arrayUnique($myArray) { $newArray = Array(); if (is_array($myArray)) { foreach($myArray as $key=>$val) { if (is_array($val)) { $val2 = arrayUnique($val); } else { $val2 = $val; $newArray=array_unique($myArray); $newArray=deleteEmpty($newArray); break; } if (!empty($val2)) { $newArray[$key] = $val2; } } } return ($newArray); } function deleteEmpty($myArray) { $retArray= Array(); foreach($myArray as $key=>$val) { if (($key<>"") && ($val<>"")) { $retArray[$key] = $val; } } return $retArray; }
попробуйте этот короткий и сладкий код -
$array = array (1,4,2,1,7,4,9,7,5,9); $unique = array(); foreach($array as $v){ isset($k[$v]) || ($k[$v]=1) && $unique[] = $v; } var_dump($unique);выход -
array(6) { [0]=> int(1) [1]=> int(4) [2]=> int(2) [3]=> int(7) [4]=> int(9) [5]=> int(5) }
Это можно сделать через функцию я сделал три дубликата функция возвращает значения, повторяющиеся в массиве .вторая функция single возвращает только те значения, которые не повторяются в массиве, а третья и полная функция возвращают все значения, но не дублируются, если какое-либо значение дублируется, оно преобразует его в single
function duplicate($arr){ $duplicate; $count=array_count_values($arr); foreach($arr as $key=>$value){ if($count[$value]>1){ $duplicate[$value]=$value; } } return $duplicate; } function single($arr){ $single; $count=array_count_values($arr); foreach($arr as $key=>$value){ if($count[$value]==1){ $single[$value]=$value; } } return $single; } function full($arr,$arry){ $full=$arr+$arry; sort($full); return $full; }}
<?php $arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20]; print_r(arr_unique($arr1)); function arr_unique($arr) { sort($arr); $curr = $arr[0]; $uni_arr[] = $arr[0]; for($i=0; $i<count($arr);$i++){ if($curr != $arr[$i]) { $uni_arr[] = $arr[$i]; $curr = $arr[$i]; } } return $uni_arr; }
существует несколько способов сделать это, которые заключаются в следующем
//first method $filter = array_map("unserialize", array_unique(array_map("serialize", $arr))); //second method $array = array_unique($arr, SORT_REGULAR);
Если вы относитесь к производительности и простого массива, использовать:
array_keys(array_flip($array));Это во много раз быстрее, чем array_unique.
Я сделал это без использования какой-либо функции.
$arr = array("1", "2", "3", "4", "5", "4", "2", "1"); $len = count($arr); for ($i = 0; $i < $len; $i++) { $temp = $arr[$i]; $j = $i; for ($k = 0; $k < $len; $k++) { if ($k != $j) { if ($temp == $arr[$k]) { echo $temp."<br>"; $arr[$k]=" "; } } } } for ($i = 0; $i < $len; $i++) { echo $arr[$i] . " <br><br>"; }
Comments