numerisch-nichtnumerisch-gemischte Werte richtig sortieren
Sebastian Becker
- php
Hallo,
ich will die Dateien eines Verzeichnisses auslesen, in ein Array packen, sortieren (mit "asort") und ausgeben. Die Dateinamen setzen sich aus numerischen und nichtnumerischen Werten zusammen und ich erhalte beispielsweise folgende Reihenfolge:
1.10d
1.10o
1.10q
1.9n
Wie kann ich erreichen, daß in der richtigen Reihenfolge sortiert wird, also so:
1.9n
1.10d
1.10o
1.10q
???
Danke für alle Hinweise, Grüße,
Sebastian Becker
Huhu Sebastian
Wie kann ich erreichen, daß in der richtigen Reihenfolge sortiert wird, also so:
1.9n
1.10d
1.10o
1.10q
???
Mmh, ich vermute mal es soll eine Kapitelnummermäßige Sortierung werden.
Also eine Möglichkeit wäre folgende:
du machst eine foreachschleife über alle Dateinamen,
dann zerlegst du (z.B. mit explode oder preg_match) die bisherige Bezeichnung in die einzelnen Bestandteile (je nachdem wie viele Ebenen Du hast).
Also bei Deinem Beispiel zwei Nummerische und eine alphabetische
Komponente.
Aus denen erzeugst Du einen String der sich dann "richtig" sortieren läßt. (printf)
also z.B.
1.9n wird zu 001-009-n
1.10d wird zu 001-010-d
1.10o wird zu 001-010-o
1.10q wird zu 001-010-q
etc.
denn so erzeugten "neuen" sortierstring nimmst Du als Key für ein Neues Array
also z.B.
$new_order[$sort_key]=$der_alte_datei_name;
Nachdem das für alle gemacht ist kannst Du mit ksort
das array nach dem Schlüssel sortieren und ausgeben.
Viele Grüße
lulu
Huhu lulu, ;-)
ich vermute mal es soll eine Kapitelnummermäßige Sortierung werden.
Es geht um Softwareversionen ...
du machst eine foreachschleife über alle Dateinamen,
dann zerlegst du ... die bisherige Bezeichnung in die einzelnen Bestandteile
Also bei Deinem Beispiel zwei Nummerische und eine alphabetische
Komponente.
Aber wie?
Aus denen erzeugst Du einen String der sich dann "richtig" sortieren läßt. (printf)
also z.B. 1.9n wird zu 001-009-n
Die einzelnen Schritte, um das zu erreichen, sind mir nicht ganz klar.
denn so erzeugten "neuen" sortierstring nimmst Du als Key für ein Neues Array
Nachdem das für alle gemacht ist kannst Du mit ksort
das array nach dem Schlüssel sortieren und ausgeben.
Ist ja mächtig kompliziert - ich hatte gehofft, daß es einfacher geht. Mal sehen ob ich mich da heranwage ...
Vieled Dank für die Hilfe,
Grüße aus Berlin,
Sebastian
Huhu Sebastian
Ist ja mächtig kompliziert - ich hatte gehofft, daß es einfacher geht. Mal sehen ob ich mich da heranwage ...
Nimm einfach den Vorschlag von Sven ;-)
"natsort" scheint genau das zu sein was Du brauchst.
Den Befehl kannte ich auch noch nicht. PHP rocks ... ;-)
Viele Grüße
lulu
Huhu lulu,
Nimm einfach den Vorschlag von Sven ;-)
"natsort" scheint genau das zu sein was Du brauchst.
Hat geklappt (mit natcasesort)! Jetzt muß ich nur noch die Reihenfolge umkehren ...
Den Befehl kannte ich auch noch nicht. PHP rocks ... ;-)
Yeah! (I agree ...)
Viele Grüße,
Sebastian
Moin!
ich will die Dateien eines Verzeichnisses auslesen, in ein Array packen, sortieren (mit "asort") und ausgeben. Die Dateinamen setzen sich aus numerischen und nichtnumerischen Werten zusammen und ich erhalte beispielsweise folgende Reihenfolge:
Nimm natsort() oder etwas ähnliches.
- Sven Rautenberg
Moin, Sven!
Nimm natsort() oder etwas ähnliches.
Super Vorschlag, hat geklappt (mit natcasesort) - und ganz ohne programmiertechnische Klimmzüge ...
Das Tüpfelchen auf dem i wäre jetzt noch eine Umkehrung der Sortierreihenfolge. Gibt es dafür auch eine Funktion?
Danke für den Tip, Grüße
Sebastian