137 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

2voto

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

$new = array();

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

Vous obtiendrez alors un nouveau tableau avec les valeurs comme clés et leur valeur est le nombre de fois qu'elles existaient dans le tableau original.

1voto

Anton Gogolev Points 59794

Mettez-les dans un map (pseudocode)

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

    $m[$word] += 1;
}

1voto

aswine Points 149

Je n'ai pas trouvé la réponse que je cherchais, alors j'ai écrit cette fonction. Elle créera un tableau qui ne contiendra que les doublons entre les deux tableaux, mais n'imprimera pas le nombre de fois qu'un élément est doublé. Elle ne répond donc pas directement à la question, mais j'espère qu'elle aidera quelqu'un dans ma situation.

function findDuplicates($array1,$array2)
{
    $combined = array_merge($array1,$array2);
    $counted = array_count_values($combined);
    $dupes = [];
    $keys = array_keys($counted);
    foreach ($keys as $key)
    {   
        if ($counted[$key] > 1)
        {$dupes[] = $key;}
    }
    sort($dupes);
    return $dupes;
}
$array1 = [1,2,3,4,5];
$array2 = [4,5,6,7,8];
$dupes = findDuplicates($array1,$array2);
print_r($dupes);

Sorties :

Array
(
    [0] => 4
    [1] => 5
)

1voto

Santiago Brot Points 19
$data = ['outer', 'inner', 'sole', 'sole', 'outer', 'outer'];

$result = max(array_count_values($data));

if($result > 1) {
  echo 'Duplicate items were found!';
}

Je pense que cette façon est plus courte et plus propre.

1voto

Rupess Points 11
function array_not_unique(array $array): array
    {
        $duplicate_array = array_diff_key( $array , array_unique( $array ) );
        $unique_array = [];
        foreach ($array as $key => $value) {
            if ( in_array($value, $duplicate_array)) {
                $duplicate_array[$key] = $value;
            }
            else {
                $unique_array[$key] = $value;
            } 

        }

        return ["unique_array" => $unique_array, "duplicate_array" => $duplicate_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