Dies geschieht, weil array_unique
Arbeiten von first sorting the values as strings, dann iterating über die sortierten Array und für jeden Wert von dem Ergebnis ohne alle aufeinanderfolgenden Werte, die es gleich vergleichen.
Die Vergleichsfunktion für "Vergleich gleich" oben wird gemäß dem zweiten Parameter ausgewählt, der für SORT_REGULAR
mit einer Gleichheitsprüfung mit ==
identisch ist.
Dieses Verhalten führt zu einer ganzen Reihe von Problemen. Da die Sortierung Quicksort ist, ist es instabil. Daher gibt das Sortieren eines Arrays, das sowohl 1
als auch '1'
enthält, keine Garantie dafür, welche davon am Anfang im Ergebnis stehen wird. Dies bedeutet, dass in manchen Fällen willkürlich "1
" und in anderen Fällen '1'
vorkommt.
Doch der Wahnsinn geht weiter: die Ansicht, dass, wenn die Sorte produziert [1, '1', '1a']
dann '1a'
nicht im Ergebnis enthalten sein (es vergleicht gleich 1
), während, wenn die Art produziert ['1', 1, '1a']
es wird dann enthalten sein (es tut nicht gleich der Zeichenkette '1'
)!
Erfolgt diese Iteration nur einmal? Denn dann sollten wir doppelte Werte bekommen, wenn eine andere '1' nach' 5' eingefügt wird. –
@OneTrickPony: Ich habe nicht explizit erwähnt, dass das Array zuerst sortiert wird (die Dokumentation tut das). Aber auf den zweiten Gedanken ist es ziemlich wichtig, weil die Art nicht stabil ist (Quicksort), also lassen Sie mich die Antwort ein wenig erweitern. – Jon
@OneTrickPony: Eigentlich funktioniert es ein bisschen anders als das, was ich glaubte - und Sie werden wahrscheinlich nicht überrascht sein zu wissen, dass das Verhalten in solchen Fällen nicht vorhergesagt werden kann, weil, nun, PHP. – Jon