Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP: Array-Sortierung mit Umlauten

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 17.11.2009, 17:43

Hallo zusammen,

ich stehe hier nun schon länger vor einem Problem, wo ich mir die Zähne ausbeiße und dennoch nicht weiter komme.

Aus der Datenbank werden 20 Datensätze abgefragt und sortiert nach Anzahl ( count() ). Diese 20 Datensätze benötige ich aber bei der Ausgabe sortiert nach der Bezeichnung. Soweit so gut...

Ein normales asort($array) sortiert mir auch die Werte entsprechend, nur eben die mit Sonderzeichen am Anfang nicht. ÄÖÜ stehen daher immer am Ende.

Seit PHP 4.4 gibt es ja das "asort($array, SORT_LOCALE_STRING)", besser gesagt, den Flag SORT_LOCALE_STRING. Eigentlich sollte es damit ja möglich sein. Doch auf meinem Testsystem (PHP5.2) sortiert der da irgendwas, aber keine Ahnung was. Schaut einfach nur bunt gewürfelt aus.

Dann heißt es, dass der Zeichensatz vom System genommen wird, bzw. man diesen per "setlocale (LC_ALL, 'de_DE@euro', 'de_DE.utf8', 'de_DE', 'de', 'ge');" vorgeben kann.
Egal ob nun mit oder ohne setlocal, der Zeichensatz ist "de_DE.utf8" und wird auch so angegeben wenn ich ihn abfrage.

So, nun stellt sich halt die Frage:
Wie kann ich das Array sortieren inkl. den Sonderzeichen??

Die Datenbank würde das schon richtig machen, doch die übernimmt ja die Sortierung nach count() und holt halt nur die 20 Datensätze aus den vorhandenen 30.000.

Hat jemand eine Idee?

Nachtrag:
Wenn ich im Array einen extra Wert mit "strtr($row->bezeichnung, array('Ä'=>'Ae','Ö'=>'Oe','Ü'=>'Ue'))" speichere, dann sortiert er auch richtig, aber irgendwie finde ich das Unfug. Unnötiges Ersetzen von Zeichen, größeres Array, nur wegen der Sortierung, etc... Geht das nicht anders?