web-dev-qa-db-fra.com

Comment supprimer les valeurs en double d'un tableau dans PHP

Comment puis-je supprimer les valeurs en double d'un tableau en PHP?

132
Ian

Utilisez array_unique () .

Exemple:

$array = array(1, 2, 2, 3);
$array = array_unique($array); // Array is now (1, 2, 3)
211
Jeremy Ruten
//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 )
21
chim

Utilisez array_values(array_unique($array));

array_unique: pour tableau unique array_values: pour réindexation

16
nimey sara thomas
$result = array();
foreach ($array as $key => $value){
  if(!in_array($value, $result))
    $result[$key]=$value;
}
6
Amr Berag

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 */
5
AgelessEssence

La seule chose qui a fonctionné pour moi est:

$array = array_unique($array, SORT_REGULAR);
4
niravpatel9898

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);
2
harsh kumar

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 :-)

2
Deb
    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

1
Alpesh Navadiya

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);
1
Dries B

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)

1
Shivivanand

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. 

1
Bollis
$array = array("a" => "moon", "star", "b" => "moon", "star", "sky");

// Deleting the duplicate items
$result = array_unique($array);
print_r($result);

ref: démo

0
nageen nayak
$arrDuplicate = array ("","",1,3,"",5);
 foreach(array_unique($arrDuplicate) as $v){
  if($v != "" ){$arrRemoved = $v;  }}
print_r($arrRemoved);
0
user1045247

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;
}
0
Mirza Obaid
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;
}
0
$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);
0
pawan kumar

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.

0
jabko87

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);
0
Aladin Banwal
<?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;
}
0
sumityadavbadli

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);
0
Shahrukh Anwar

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)
}
0
Rohit Suthar