strings sortieren

Thomasio

Erfahrenes Mitglied
Ich versuche eine Sortierung zu machen, so wie Windows das schon länger macht, sprich Buchstaben ohne Beachtung von gross/klein und Zahlen nach Wert.

Beispiel:

123Test123
9Test123
123Test9
9Test9

Soll sortiert so aussehen

9Test9
9Test123
123Test9
123Test123

Gibt es dafür eine fertige Funktion, oder eine Stück Code dazu?
 
array_multisort().

Zuerst ein Sortierarray erstellen indem du alle Strings mit strtoupper() in in Grossbuchstaben wandelst.
Dann mit array_multisort() den Sortierarray sortieren und den eigentlichen Stringarray mitsortieren lassen (mehr darüber in der Doku zu array_multisort())

PHP:
$strings[] = '123test123';
$strings[] = '9Test123';
$strings[] = '123Test9';
$strings[] = '9test9';

//Array-Kopy mit Grossbuchstabenwandel
$sort = array_map('strtoupper', $strings);
//Sortieren nach dem Grussbuchstabenarray, der eigentliche Array wird mitsortiert
array_multisort($sort, SORT_DESC, $strings);    
print_r($strings);

Ausgabe:
Code:
Array
(
    [0] => 9test9
    [1] => 9Test123
    [2] => 123Test9
    [3] => 123test123
)

Nachtrag: @Starfox2007
rsort() (oder sort() für aufsteigend) führt nicht zum gewünschten Resultat. Gross und Kleinbuchstaben werden unterschiedlich gewertet.
Code:
Array
(
    [0] => 9test9
    [1] => 9Test123
    [2] => 123test123
    [3] => 123Test9
)

Nachtrag II:
Man könnte auch mit usort() eine eigene Sortierfunktion schreiben, die zuerst die Werte in Grossbuchstaben wandelt und dann vergleicht. Ich finde die array_multisort() aber eleganter

Nachtrag III:
natcasesort() ist auch eine möglichkeit. Wertet aber9Test kleiner als 123Test, da die Zahlen als 9 mit 123 verglichen werden...
 
Zurück