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, [...]
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);
}
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)));
}
Wenn Du deinen Benutzernamen in Besitz nehmen möchtest, solltest Du dich registrieren:
Benutzername
Passwort
Passwort wiederholen
E-Mail
PHP Gangsta - Der PHP Blog
Ich beschäftige mich in meinem Blog hauptsächlich mit PHP und dem Zend Framework. Ich stelle Code vor, reiße neue Themen an und schreibe nebenbei aber auch über dies und das aus der Entwicklerwelt und interessanten IT-News.