2009-07-23 9 views
86

Je travaille avec un tableau unidimensionnel en PHP. Je voudrais détecter la présence de valeurs en double, puis compter le nombre de valeurs en double et sortir les résultats. Par exemple, étant donné le tableau suivant:Comment détecter les valeurs en double dans un tableau PHP?

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
    'pear', 'kiwi', 'kiwi', 'kiwi'); 

Je voudrais imprimer:

apple (2) 
orange 
pear (2) 
banana 
kiwi (3) 

Tous les conseils sur la façon d'aborder ce problème?

Merci.

Mike

Répondre

188

Vous pouvez utiliser la fonction array_count_values

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
'pear', 'kiwi', 'kiwi', 'kiwi'); 

print_r(array_count_values($array)); 

volonté sortie

Array 
(
    [apple] => 2 
    [orange] => 1 
    [pear] => 2 
    etc... 
) 
2

Stuff les en map (pseudocode)

map[string -> int] $m 
foreach($word in $array) 
{ 
    if(!$m.contains($word)) 
     $m[$word] = 0; 

    $m[$word] += 1; 
} 
2

Peut-être quelque chose comme ceci (code non testé mais devrait vous donner une idée)?

$new = array(); 

foreach ($array as $value) 
{ 
    if (isset($new[$value])) 
     $new[$value]++; 
    else 
     $new[$value] = 1; 
} 

Ensuite, vous obtiendrez un nouveau tableau avec les valeurs clés et leur valeur est le nombre de fois où ils existaient dans le tableau original.

+0

Bonne réponse, mais PHP a une fonction existante qui fait exactement cela: [ 'array_count_values'] (http://php.net/array_count_values) – Navarr

6

Vous pouvez essayer de transformer ce tableau en tableau associatif avec les fruits en tant que clés et le nombre d'occurrences en tant que valeurs. Peu longue haleine, mais il ressemble à:

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
    'pear', 'kiwi', 'kiwi', 'kiwi'); 
$new_array = array(); 
foreach ($array as $key => $value) { 
    if(isset($new_array[$value])) 
     $new_array[$value] += 1; 
    else 
     $new_array[$value] = 1; 
} 
foreach ($new_array as $fruit => $n) { 
    echo $fruit; 
    if($n > 1) 
     echo "($n)"; 
    echo "<br />"; 
} 
+1

Bonne réponse, mais PHP a une fonction existante qui fait exactement cela: ['array_count_values'] (http://php.net/array_count_values) – Navarr

7

Pour obtenir l'utilisation débarrasser array_unique(). Pour détecter si utiliser count(array_unique()) et comparer à count($array).

20
function array_not_unique($a = array()) 
{ 
    return array_diff_key($a , array_unique($a)); 
} 
+0

Ceci est une réponse dope. – usumoio

91
if(count(array_unique($array))<count($array)) 
{ 
    // Array has duplicates 
} 
else 
{ 
    // Array does not have duplicates 
} 
+0

"... puis comptez le nombre de valeurs dupliquées et placez les résultats." – showdev

3
<?php 

$arr = array(1, 2, 3, 2, 5, 6, 7); 

print_r(array_count_values($arr)); 

?> 
0
$count = 0; 
$output =''; 
$ischeckedvalueArray = array(); 
for ($i=0; $i < sizeof($array); $i++) { 
    $eachArrayValue = $array[$i]; 
    if(! in_array($eachArrayValue, $ischeckedvalueArray)) { 
     for($j=$i; $j < sizeof($array); $j++) { 
      if ($array[$j] === $eachArrayValue) { 
       $count++; 
      } 
     } 
     $ischeckedvalueArray[] = $eachArrayValue; 
     $output .= $eachArrayValue. " Repated ". $count."<br/>"; 
     $count = 0; 
    } 

} 

echo $output; 
Questions connexes