Der Martin: array_unique sortiert nicht richtig und macht Fehler?

Beitrag lesen

Hi,

Warum das? Weil alle Werte, die nicht mit einer Ziffer beginnen, numerisch als 0 interpretiert werden. Und wenn jetzt als zweiter Schritt die Eliminierung der mehrfach auftretenden Werte durchläuft, fallen "gelb", "grün", das zweite "rot", "blau" und "gold" raus, weil sie alle 0 ergeben, der Wert 0 aber durch den ersten "rot"-Eintrag schon da ist.
ok, etwas verwirrend. Selbst wenn deine Schlussfolgerung richtig ist, ist dieses Verhalten wirklich so gewünscht bei dieser Funktion?

das weiß ich nicht. Ehrlich gesagt, ich hätte es auch nicht erwartet. Ich hätte auch gedacht, dass die Uniquification als erster Schritt abläuft, und erst im zweiten Schritt optional(!) die verbliebenen Werte sortiert werden.

Andererseits: Wer numerisch sortiert, der erwartet numerische Werte. Nicht-numerische Einträge sollten dann also gar nicht vorkomemn bzw. in einer vorgelagerten Eingabeprüfung schon reklamiert worden sein. Wenn diese Einträge dann in der weiteren Verarbeitung unter den Tisch fallen, ist das gar nicht so falsch.

Nehmen wir mal den normalen Fall an, für den diese Funktion eigentlich konzipiert sein sollte:
Du hast ein großes Array mit vielen auch gleichen Werten. Die Doppler sollen raus und das Ganze, wie auch immer(alphabetisch, usw...), sortiert werden.

Ja, aber dann ergibt es IMO keinen Sinn, streng "numerisch" zu sortieren.

Was passiert? Sortierung erfolgt nicht

Doch, sicher. Nur nicht so, wie du es erwartest.
Die Funktion heißt array_unique, also ist der primäre Zweck, Dubletten zu finden. Das Sortieren ist nicht der eigentliche Zweck der Funktion, sondern nur ein interner optionaler Zwischenschritt vor dem eigentlichen Filterlauf. Das Array, das als Ergebnis zurückgegeben wird, ist von dieser Sortierung offenbar nicht betroffen (ja, das finde ich auch verwirrend). Wenn du sortieren willst, verwende vorab eine der Sortierfunktionen, etwa array_sort().
Ich halte es eh nicht für sinnvoll, dass array_unique() noch mit Sortier-Fähigkeiten ausgestattet wurde - das Ergebnis ist genau die Verblüffung, wie du sie jetzt erlebst. Aber solche unlogischen Lösungen gibt's in PHP häufig.

PS: Wieso markierst du deine PHP-Debugausgaben hier als HTML?
Weil es ja nur Browseroutput ist und kein PHP-Code. Aber wenn es hier anders gewünscht ist, mach ich das gerne demnächst als PHP ;-)

Nein. Es ist ja auch kein PHP. Am besten nur als [code] ohne Sprachangabe.

Ciao,
 Martin

--
Alle Tage sind gleich lang. Aber unterschiedlich breit.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(