| 

.NET C# Java Javascript Exception

9
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, [...]

Ähnliche Artikel:
  1. Per Index auf einen assoziativen Array zugreifen
  2. Ergebnisse der Array-Umbau-Aufgabe
  3. Kleine Aufgabe: Ein Array umbauen

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
php array-count-values array-keys array-unique doppelte-werte
Schreibe einen Kommentar:
Themen:
doppelte-werte array-unique array-keys array-count-values php
Entweder einloggen... ...oder ohne Wartezeit registrieren
Benutzername
Passwort
Passwort wiederholen
E-Mail