121 votes

Comment détecter les valeurs dupliquées dans un tableau PHP ?

Je travaille avec un tableau à une dimension 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, avec le tableau suivant :

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

Je voudrais imprimer :

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

Des conseils sur la manière d'aborder ce problème ?

Merci.

Mike

247voto

Silfverstrom Points 8132

Vous pouvez utiliser tableau_compte_valeurs fonction

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

print_r(array_count_values($array));

produira

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

1 votes

Cette solution ne couvre pas les valeurs non-entières et non-chaînes et, en conclusion, elle produit des effets secondaires.

118voto

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

0 votes

"...puis compter le nombre de valeurs dupliquées et sortir les résultats."

1 votes

Cette solution ne couvre pas les valeurs non-entières et non-chaînes et, en conclusion, elle produit des effets secondaires. Utilisation de array_unique($array, SORT_REGULAR) oblige PHP à vérifier les éléments normalement sans changer le type, mais c'est une comparaison approximative. Ainsi, différentes instances d'une même classe avec le même contenu seront uniques.

41voto

Anton Maryanov Points 101
function array_not_unique( $a = array() )
{
  return array_diff_key( $a , array_unique( $a ) );
}

2 votes

C'est la seule réponse qui renvoie uniquement les valeurs dupliquées.

2 votes

Étendu pour ne donner que la liste des valeurs dupliquées (ce dont j'avais besoin) : return array_values(array_unique(array_diff_key($a, array_unique($a))));

9voto

Simon Scarfe Points 2831

Vous pourriez essayer de transformer ce tableau en un tableau associatif avec les fruits comme clés et le nombre d'occurrences comme valeurs. C'est un peu long, mais ça ressemble à ça :

$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 votes

Bonne réponse, mais PHP a une fonction existante qui fait exactement cela : array_count_values

9voto

Pour s'en débarrasser, utilisez array_unique() . Pour détecter s'il y a une utilité count(array_unique()) et comparer à count($array) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X