Comment puis-je supprimer les valeurs en double d'un tableau en PHP?
Utilisez array_unique () .
Exemple:
$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 )
Utilisez array_values(array_unique($array));
array_unique
: pour tableau unique array_values
: pour réindexation
$result = array();
foreach ($array as $key => $value){
if(!in_array($value, $result))
$result[$key]=$value;
}
parfois, array_unique()
n'est pas la solution, si vous voulez obtenir des éléments uniques ET dupliqués ...
$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
résultats sur
array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
La seule chose qui a fonctionné pour moi est:
$array = array_unique($array, SORT_REGULAR);
Nous pouvons créer un tel type de tableau pour utiliser cette dernière valeur qui sera mise à jour en colonne ou en valeur de clé et nous obtiendrons une valeur unique à partir du tableau ...
$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);
explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));
Cela prendra en charge les associations de clés et sérialisera les clés pour le nouveau tableau résultant :-)
if (@!in_array($classified->category,$arr)){
$arr[] = $classified->category;
?>
<?php } endwhile; wp_reset_query(); ?>
première vérification de la valeur dans un tableau et même valeur ignorée
C'est un excellent moyen de le faire. Vous voudrez peut-être vous assurer que sa sortie est à nouveau un tableau. Maintenant, vous ne montrez que la dernière valeur unique.
Essaye ça:
$arrDuplicate = array ("","",1,3,"",5);
foreach (array_unique($arrDuplicate) as $v){
if($v != "") { $arrRemoved[] = $v; }
}
print_r ($arrRemoved);
Supprimer les valeurs en double d'un tableau associatif en 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]);
}
Tableau ([0] => aaa-aaa [1] => 12/1/1 [2] => 1.15)
En fonction de la taille de votre tableau, j'ai trouvé
$array = array_values( array_flip( array_flip( $array ) ) );
peut être plus rapide que array_unique.
$array = array("a" => "moon", "star", "b" => "moon", "star", "sky");
// Deleting the duplicate items
$result = array_unique($array);
print_r($result);
ref: démo
$arrDuplicate = array ("","",1,3,"",5);
foreach(array_unique($arrDuplicate) as $v){
if($v != "" ){$arrRemoved = $v; }}
print_r($arrRemoved);
Cela peut être fait par la fonction que j'ai faite trois fois la fonction dupliquer retourne les valeurs qui sont dupliquées dans un tableau.
Deuxième fonction unique ne renvoie que les valeurs qui sont une moyenne simple non répétée dans un tableau et les fonctions troisième et complète renvoient toutes les valeurs mais ne sont pas dupliquées si une valeur est dupliquée, elle est convertie en unique;
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;
}
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;
}
$a = array(1, 2, 3, 4);
$b = array(1, 6, 5, 2, 9);
$c = array_merge($a, $b);
$unique = array_keys(array_flip($c));
print_r($unique);
Si vous vous préoccupez des performances et que vous avez un tableau simple, utilisez:
array_keys(array_flip($array));
C'est beaucoup plus rapide que array_unique.
Ici, j'ai créé un deuxième tableau vide et utilisé la boucle for
avec le premier tableau qui contient des doublons. Il fonctionnera autant de fois que le nombre du premier tableau. Ensuite, comparé avec la position du tableau avec le premier tableau et corrigé, il a déjà ou non cet élément en utilisant in_array
. Sinon, il ajoutera cet élément au second tableau avec array_Push
.
$a = array(1,2,3,1,3,4,5);
$count = count($a);
$b = [];
for($i=0; $i<$count; $i++){
if(!in_array($a[$i], $b)){
array_Push($b, $a[$i]);
}
}
print_r ($b);
<?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;
}
Il peut y avoir plusieurs façons de les faire, qui sont les suivantes
//first method
$filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));
//second method
$array = array_unique($arr, SORT_REGULAR);
essayez ce code short & sweet -
$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);
Sortie -
array(6) {
[0]=>
int(1)
[1]=>
int(4)
[2]=>
int(2)
[3]=>
int(7)
[4]=>
int(9)
[5]=>
int(5)
}