2008-11-21 9 views

Répondre

189

Utilisez array_unique().

Exemple:

$array = array(1, 2, 2, 3); 
$array = array_unique($array); // Array is now (1, 2, 3) 
+13

@Ian - 'Notez que array_unique() est –

+13

Ce qui précède conservera les clés des éléments. Si vous voulez les réindexer, appliquez en plus array_values: http://www.php.net/manual/fr/function.array-values.php – CodeVirtuoso

+14

perfect ....... 'array_values ​​(array_unique ($ array)) 'fait la chose parfaite pour moi. Merci @Freelancer –

-1

Je l'ai fait sans utiliser la fonction.

$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>"; 
} 
2

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

Cela va prendre soin des principales associations et sérialiser les clés du nouveau tableau résultant :-)

+1

Quel serait l'effet de 'explode (", "$ YOUR_ARRAY)' quand '$ YOUR_ARRAY' est 'array (" 1 "," 2 "," 3 ")'? – kiamlaluno

+0

@kiamlaluno - :) et la réponse est: ** Attention: explode() s'attend à ce que le paramètre 2 soit une chaîne, tableau donné en ... en ligne .... ** –

+0

@JesseChisholm Oui, c'était le point, mais personne n'a remarqué le code, apparemment. – kiamlaluno

3
$array = array("Ram","Thiru","Ram","Thiraviya"); 
$array = array_unique($array); 

Sortie:

"Ram", "Thiru", "Thiraviya"

+3

Ceci est un doublon totalement inutile de la réponse acceptée de * 2008 *. –

4

parfois array_unique() est pas le chemin, si vous voulez obtenir des objets uniques et dupliquées ...

$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 */ 
0
$arrDuplicate = array ("","",1,3,"",5); 
foreach(array_unique($arrDuplicate) as $v){ 
    if($v != ""){$arrRemoved = $v; }} 
print_r($arrRemoved); 
+0

Guys ce serait une façon plus intelligente de supprimer les doublons .......... – user1045247

+1

Cela n'explique vraiment rien, et il ne semble pas être "plus intelligent". – Sven

+0

Vous pouvez toujours expliquer pourquoi en éditant votre propre message, il suffit de cliquer sur le lien "modifier" à la fin de votre réponse. Je suggère également que vous jetez un oeil à la FAQ: http://stackoverflow.com/faq – ForceMagic

21
//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) 
1

C'est une excellente façon pour le faire. Peut-être que vous voulez vous assurer que sa sortie est à nouveau un tableau. Maintenant vous montrez seulement la dernière valeur unique.

Essayez ceci:

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

foreach (array_unique($arrDuplicate) as $v){ 
    if($v != "") { $arrRemoved[] = $v; } 
} 
print_r ($arrRemoved); 
0
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

essayer ce court & Code doux -

$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

Pouvez-vous m'expliquer, comment ce code fonctionne? –

+0

Abuser des opérateurs booléens pour un flux de contrôle comme celui-ci est inutilement confus. Utilisez simplement 'if'. –

0

i t peut être fait par la fonction i fait trois fonctions duplicate renvoie les valeurs qui sont dupliquées dans le tableau .second fonction single return seules les valeurs qui sont simples ne sont pas répétées dans le tableau et troisième et pleine fonction retournent toutes les valeurs mais pas dupliquées si une valeur est dupliqués il le convertir en 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; 

} 

}

0

en fonction de la taille de votre tableau, je l'ai trouvé

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

peut être plus rapide que array_unique.

+0

Plus d'informations sur ce qui se passe ici et serait-il plus rapide avec un tableau plus grand ou plus petit. –

+0

Le double retournement va supprimer les valeurs dupliquées, car une clé ne peut pas exister deux fois, sinon elle est écrasée. Si une valeur est dupliquée et que le tableau est retourné, la dernière occurrence (je suppose) sera la valeur de la clé. – Goldentoa11

+0

En PHP 7, j'ai remarqué que retourner un tableau multidimensionnel plus d'une fois peut réorganiser les éléments du tableau de façon inattendue. –

1

La seule chose qui a fonctionné pour moi est:

$array = array_unique($array, SORT_REGULAR); 
0

La fonction array_unique fera pour vous. Vous avez juste besoin d'ajouter le drapeau SORT_REGULAR:

$items_thread = array_unique($items_thread, SORT_REGULAR); 
0
<?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; 
} 
5

Utilisez array_values(array_unique($array));

array_unique: pour un tableau unique, array_values: pour la réindexation

0
if (@!in_array($classified->category,$arr)){   
            $arr[] = $classified->category; 
           ?> 

      <?php } endwhile; wp_reset_query(); ?> 

première valeur de contrôle de temps dans le tableau et trouvé même valeur ignorer

2

Nous pouvons créer ce type de tableau à utiliser cette dernière valeur sera mise à jour dans la colonne ou valeur de clé et nous obtenir 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); 
0

Pour supprimer la valeur double de tableau, vous pouvez utiliser array_unique ($ your_array) fonction de PHP

0

Supprimer les valeurs dupliquées 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]); 
} 

Array ([0] => aaa-aaa [1] => 12/1/1 [2] => 1,15)

0
$result = array(); 
foreach ($array as $key => $value){ 
    if(!in_array($value, $result)) 
    $result[$key]=$value; 
} 
Questions connexes