136 Stimmen

Wie erkennt man doppelte Werte in einem PHP-Array?

Ich arbeite mit einem eindimensionalen Array in PHP. Ich möchte das Vorhandensein von doppelten Werten erkennen, dann die Anzahl der doppelten Werte zählen und die Ergebnisse ausgeben. Zum Beispiel das folgende Array gegeben:

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

Ich möchte gerne drucken:

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

Haben Sie einen Rat, wie Sie dieses Problem angehen können?

Gracias.

Mike

267voto

Silfverstrom Punkte 26486

Sie können verwenden array_count_values fonction

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

print_r(array_count_values($array));

wird ausgegeben

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

3 Stimmen

Diese Lösung deckt keine nicht-ganzzahligen und nicht-String-Werte ab und führt zu Nebeneffekten.

129voto

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

1 Stimmen

"...dann die Anzahl der doppelten Werte zählen und die Ergebnisse ausgeben."

2 Stimmen

Diese Lösung deckt keine nicht-ganzzahligen und nicht-String-Werte ab und führt zu Nebeneffekten. Verwendung von array_unique($array, SORT_REGULAR) zwingt PHP dazu, Elemente normal zu prüfen, ohne den Typ zu ändern, aber es ist ein lockerer Vergleich. So werden verschiedene Instanzen einer Klasse mit gleichem Inhalt eindeutig identifiziert.

47voto

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

4 Stimmen

Dies ist die einzige Antwort, die nur die doppelten Werte zurückgibt.

3 Stimmen

Erweitert, um nur die Liste der doppelten Werte anzuzeigen (was ich brauchte): return array_values(array_unique(array_diff_key($a, array_unique($a))));

0 Stimmen

Scrollen stoppen. Auch wenn es nicht so aussieht, ist dies die Antwort, nach der Sie suchen.

9voto

Zum Loswerden verwenden Sie array_unique() . Um festzustellen, ob eine Verwendung vorliegt count(array_unique()) und vergleichen mit count($array) .

9voto

Simon Scarfe Punkte 8980

Sie könnten versuchen, das Array in ein assoziatives Array mit den Früchten als Schlüssel und der Anzahl der Vorkommen als Wert zu verwandeln. Etwas langatmig, aber es sieht so aus:

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

Gute Antwort, aber in PHP gibt es eine Funktion, die genau das tut: array_count_values

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X