Facebook
Twitter
Google+
Kommentare
0

Doppelte Array-Einträge entfernen

Vor kurzem hatte ich das kleine Problemchen dass in einem Array die Werte (Strings und Integer) mehrfach vorkamen, ich diese aber nicht gebrauchen konnte. Mit array_unique() kann man doppelte bzw. mehrfach vorkommende Werte auf ein Vorkommen reduzieren, aber es gibt keine direkte Methode um mehrfach vorkommende Werte ganz zu entfernen.

Beispiel: Aus dem Array (1, 5, 8, ‘Michael’, 5, 4, 9, ‘Martin’, 18, 12, ‘Michael’, 4, 12) sollen die mehrfach vorkommenden Werte entfernt werden, sodass nur noch das Array (1, 8, 9, ‘Martin’, 18) übrig bleibt.

Meine einfache und erste Lösung ist die folgende:

function removeDuplicates($array) {
    $counts = array_count_values($array);

    foreach ($counts as $value => $counter) {
        if ($counter > 1) {
            unset($counts[$value]);
        }
    }

    return array_keys($counts);
}

Der Aufruf sieht dann wie folgt aus:

$a = array(1, 5, 8, 'Michael', 5, 4, 9, 'Martin', 18, 12, 'Michael', 4, 12);

var_dump(removeDuplicates($a));

Habt ihr eine andere/bessere Funktion? Gerade bei sehr großen Arrays wäre es evtl. interessant schnellere Lösungen zu kennen, denn meine durchläuft das Array 3 Mal (array_count_values(), meine foreach Schleife und array_keys()), es müßte auch mit einem oder maximal 2 Schleifendurchläufen gehen…

Edit:

Mir ist gerade noch nach dem Schreiben des Artikels eine zweite Lösung eingefallen, die aber bei sehr großen Arrays genauso langsam sein dürfte und etwas schwerer zu durchschauen ist:

function removeDuplicates($array) {
return array_diff($array, array_diff_assoc($array, array_unique($array)));
}

Ähnliche Artikel:

  1. Kleine Aufgabe: Ein Array umbauen
  2. Per Index auf einen assoziativen Array zugreifen
  3. Ergebnisse der Array-Umbau-Aufgabe
Über den Autor

PHP Gangsta

Der zweitgrößte deutsche, eher praxisorientierte PHP-Blog von Michael Kliewe veröffentlicht seit Mitte 2009 Artikel für Fortgeschrittene.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen