Sebastian Becker: numerisch-nichtnumerisch-gemischte Werte richtig sortieren

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

  1. 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

    1. 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

      1. 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

        1. 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

  2. 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

    1. 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