Strings nach Buchstaben, dann nach Zahlen sortieren
rsc
- php
Hallo,
ich suche eine PHP-Funktion, die mir String sortiert, so dass zuerst die Strings nach den Buchstaben (alphabetisch/aufwärts) sortiert werden und danach folgend die Strings, die mit Zahlen beginnen (ebenfalls aufsteigend).
Eine PHP-eigene Funktion habe ich keine bisher gefunden, aber ich lasse mich gerne eines besseren belehren.
Hat jemand dafür bereits eine fertige Lösung?
Danke,
Robert
hi,
ich suche eine PHP-Funktion, die mir String sortiert,
diese liegen also vermutlich als werte eines arrays vor, oder?
so dass zuerst die Strings nach den Buchstaben (alphabetisch/aufwärts) sortiert werden und danach folgend die Strings, die mit Zahlen beginnen (ebenfalls aufsteigend).
Eine PHP-eigene Funktion habe ich keine bisher gefunden, aber ich lasse mich gerne eines besseren belehren.
ich glaube nicht, dass es eine funktion dafür gibt.
bei strings wendet php eine alphanummerische sortierung an, und dabei werden die ziffern nun mal vor den buchstaben einsortiert, da sie ja auch vor denen im ascii-zeichensatz liegen.
deshalb wirst du hier mit den "normalen" funktionen zum sortieren von arrays nicht zum ziel kommen.
es gibt aber auch funktionen wie usort() (http://www.php.net/manual/de/function.usort.php), wo du eine eigene vergleichsfunktion angeben kannst.
du müsstest dir also eine eigene kleine vergleichsfunktion schreiben, die nur zwei übergeben werte vergleicht, und dann -1 zurückgibt, wenn der erste wert "kleiner" als der zweite ist, bzw. 1 im anderen fall.
was "kleiner" heisst hängt hierbei natürlich von der sortierreihenfolge ab, die du dir definiert hast.
sorge also dafür, dass deine vergleichsfunktion im falle eines vergleichs eines buchstaben mit einer ziffer den buchstaben als "kleiner" als die ziffer behandelt (die übrigen vergleiche, also buchstabe mit buchstabe bzw. ziffer mit ziffer, sollten natürlich das ergebnis liefern, was ein standardmäßiger alphanummerischer vergleich sonst auch liefert).
gruss,
wahsaga
Hallo nochmal,
bei strings wendet php eine alphanummerische sortierung an, und dabei werden die ziffern nun mal vor den buchstaben einsortiert, da sie ja auch vor denen im ascii-zeichensatz liegen.
Das war mir klar, deswegen ja auch meine Frage...
es gibt aber auch funktionen wie usort() (http://www.php.net/manual/de/function.usort.php), wo du eine eigene vergleichsfunktion angeben kannst.
Wenn ich ehrlich bin, ist mir das für ca. 5 zu sortierende Einträge viel zu viel Arbeit...ich machs jetzt so (du hast mich da irgendwie auf die Idee gebracht): Ich sortiere erstmal "normal" und gebe dann nur die mit [a-zA-Z] aus und dannach die anderen restlichen. Es reicht mir, wenn es in der Ausgabe sortiert wird, bei so wenig Einträgen reicht das völlig.
BTW, es wäre eh ein mehrdimensionales Array geworden, ist mir nachträglich aufgefallen.
Danke für deinen indirekten Idee-Anstoß :)
Robert