Flo: falsche sortierung mi asort

Hi!

Ich denke, das das Thema bestimmt schonmal behandelt wurde, aber die Suche hat bei mir keine ordentlichen Ergebnisse gebracht... :-S

Wenn ich ein Array mit Hilfe von asort sortiere, dann kommt es bei mir dazu, dass das Ergebnis immer so aussieht:
de1, de10, de11, de2

Wie kann ich die Sache so drehen, dass die 10 und die 11 nicht nach "de1" sondern wirklich am schluss (es sind ja die beiden letzten Elemente eigentlich) angezeigt werden?

Gruß Flo

  1. Hi,

    Wie kann ich die Sache so drehen, dass die 10 und die 11 nicht nach "de1" sondern wirklich am schluss (es sind ja die beiden letzten Elemente eigentlich) angezeigt werden?

    dazu benötigst du eine Sortierung nach der "natürlichen Reihenfolge". Sowas macht z.B. natsort().

    Gruß,
    Andreas.

    1. Hi,

      dazu benötigst du eine Sortierung nach der "natürlichen Reihenfolge". Sowas macht z.B. natsort().

      huch Gott, die Funktion kannte ich noch nicht. Insofern hat sich wohl schon jemand die Mühe gemacht, die von mir zuletzt genannte Alternative zu implementieren ...

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hi Cheatah,

        huch Gott, die Funktion kannte ich noch nicht. Insofern hat sich wohl schon jemand die Mühe gemacht, die von mir zuletzt genannte Alternative zu implementieren ...

        die vergleichbare Vergleichsfunktion strnatcmp() für Strings auch noch nicht? Mit dieser und uasort(), also

          
        uasort($array, 'strnatcmp');  
        
        

        kann man das Verhalten von natsort() leicht nachbauen.

        Gruß,
        Andreas.

        1. Hui!
          Danke für eure vielen Antworten!

          Klappt ja jetzt einwandfrei!

          Irgendjemand (oder auch recht viele andere) hat mal gesagt:
          PHP ist langweilig... für alles gibt es bereits Funktionen :-)

          Sehe ich in diesem Moment zumindest genauso, wenn man weiß, wie die Funktionen heißen :-D

          Also Danke nochma!

          Gruß Flo

  2. Hi,

    Ich denke, das das Thema bestimmt schonmal behandelt wurde,

    hm, naja, eigentlich kommen nur sehr wenige Leute auf die Idee, textuelle Daten "irgendwo mittendrin nummerisch" sortieren zu wollen.

    Wie kann ich die Sache so drehen, dass die 10 und die 11 nicht nach "de1" sondern wirklich am schluss (es sind ja die beiden letzten Elemente eigentlich) angezeigt werden?

    PHP kann nicht wissen, dass es gewisse Anteile eines Strings plötzlich mit einem völlig neuen Algorithmus sortieren soll. Entweder normalisierst Du die Werte also, so dass sie einem Typus entsprechen, dessen Sortierung Deinen Wünschen entspricht, oder Du schreibst eine eigene Sortierroutine.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. echo $begrüßung;

      hm, naja, eigentlich kommen nur sehr wenige Leute auf die Idee, textuelle Daten "irgendwo mittendrin nummerisch" sortieren zu wollen.

      Eigentlich dürften das sogar recht viele sein. Die wenigsten werden so vorausschauend sein, dass sie beim Durchnummerieren von beispielsweise Dateinamen gleich passend viele Vornullen einzufügen, so dass man eine Sortierung nach Zeichen vornehmen kann. Das liegt sicher daran, dass man natürlicherweise 1, 2, 3, ... 9, 10, 11, .. 99, 100, 101, ... zählt und nicht 001, 002, 003, ...

      echo "$verabschiedung $name";

      1. Hallo,

        hm, naja, eigentlich kommen nur sehr wenige Leute auf die Idee, textuelle Daten "irgendwo mittendrin nummerisch" sortieren zu wollen.

        Eigentlich dürften das sogar recht viele sein. Die wenigsten werden so vorausschauend sein, dass sie beim Durchnummerieren von beispielsweise Dateinamen gleich passend viele Vornullen einzufügen, so dass man eine Sortierung nach Zeichen vornehmen kann.

        naja, wie viele das tatsächlich tun, weiß ich natürlich nicht. Ich tu das auf jeden Fall immer dann, wenn
         a) ich die zu erwartende Gesamtmenge zumindest abschätzen kann
        und
         b) schon bekannt oder zumindest zu erwarten ist, dass die Sachen irgendwann mal sortiert werden sollen.

        Das liegt sicher daran, dass man natürlicherweise 1, 2, 3, ... 9, 10, 11, .. 99, 100, 101, ... zählt und nicht 001, 002, 003, ...

        Nee, üblicherweise würde man mit der 0 beginnen, nicht willkürlich mit der 1. ;-)
        Datums- und Uhrzeitangaben werden übrigens sehr häufig mit führenden Nullen geschrieben. Um nur ein Beispiel zu nennen.

        Doch das war AFAIS gar nicht der Punkt, den Cheatah meinte, sondern eher die Mischung von konstantem Text und alphanumerischen Bestandteilen. Das ist natürlich sehr ungünstig, wenn man dann nach einem der Bestandteile sortieren will.

        Ciao,
         Martin

        --
        Soso, der Klügere gibt nach.
        Aber warum sollen sich immer nur die Dummen durchsetzen?  .oO(?)
        1. echo $begrüßung;

          hm, naja, eigentlich kommen nur sehr wenige Leute auf die Idee, textuelle Daten "irgendwo mittendrin nummerisch" sortieren zu wollen.
          Eigentlich dürften das sogar recht viele sein. Die wenigsten werden so vorausschauend sein, dass sie beim Durchnummerieren von beispielsweise Dateinamen gleich passend viele Vornullen einzufügen, so dass man eine Sortierung nach Zeichen vornehmen kann.
          naja, wie viele das tatsächlich tun, weiß ich natürlich nicht. Ich tu das auf jeden Fall immer dann, wenn

          Ja, du zählst ja auch zu den Erfahrenen im Umgang mit Datenhaltung,

          a) ich die zu erwartende Gesamtmenge zumindest abschätzen kann

          bist vorausschauend,

          b) schon bekannt oder zumindest zu erwarten ist, dass die Sachen irgendwann mal sortiert werden sollen.

          und interessierst dich für solche Vorgänge und weißt um ihre Vorraussetzungen. War das schon immer so?

          Das liegt sicher daran, dass man natürlicherweise 1, 2, 3, ... 9, 10, 11, .. 99, 100, 101, ... zählt und nicht 001, 002, 003, ...
          Nee, üblicherweise würde man mit der 0 beginnen, nicht willkürlich mit der 1. ;-)

          Die Null nimmt im alltäglichen Gebrauch eher eine Sonderstellung ein. Und wenn du schon konsequent anfangen willst, dann nimm die -128 oder -32678 :-)

          Datums- und Uhrzeitangaben werden übrigens sehr häufig mit führenden Nullen geschrieben. Um nur ein Beispiel zu nennen.

          Ja, aber auch erst, seit die EDV maßgeblichen Einzug ins Alltagsleben und Formularwesen gehalten hat. Der Mensch passt sich den (Formular-)Zwängen mehr (du) oder weniger (Lieschen Müller) freiwillig an. Ich glaube aber kaum, dass L.M. auch ihre Urlauspostkarten nach DIN datiert. Bei dir hingegen kann ich mir das gut vorstellen :-)

          Doch das war AFAIS gar nicht der Punkt, den Cheatah meinte, sondern eher die Mischung von konstantem Text und alphanumerischen Bestandteilen. Das ist natürlich sehr ungünstig, wenn man dann nach einem der Bestandteile sortieren will.

          Da stimme ich dir völlig zu, bin aber der Meinung, dass das Normalisieren von Daten ist etwas, was man normalerweise erst im Zusammenhang mit der näheren Beschäftigung mit der Datenhaltung kennenlernt. Unter Umständen ist es aber auch nicht (gescheit/praktikabel) möglich, wie beispielsweise bei Dateinamen, eine Trennung und getrennte Behandlung vorzunehmen. Gerade für solche allzu "normalmensch"lichen Fälle hat man ja das Natural Sort erfunden.

          echo "$verabschiedung $name";

          1. Mahlzeit,

            a) ich die zu erwartende Gesamtmenge zumindest abschätzen kann
            bist vorausschauend,
            b) schon bekannt oder zumindest zu erwarten ist, dass die Sachen irgendwann mal sortiert werden sollen.
            und interessierst dich für solche Vorgänge und weißt um ihre Vorraussetzungen. War das schon immer so?

            ja, wenn auch mit anderen Hintergedanken. Ich war aber schon als Jugendlicher, wo ich von der EDV noch keinen Dunst hatte, immer auf eine möglichst einheitliche, systematische Darstellung bemüht. Damals war es einfach mein Gefühl für Ästhetik, dass etwas, was zusammengehört, auch eine einheitliche Form und Struktur haben müsste. Und mir fällt heute noch die Vorstellung schwer, dass das bei anderen nicht so sein könnte.

            Nee, üblicherweise würde man mit der 0 beginnen, nicht willkürlich mit der 1. ;-)
            Die Null nimmt im alltäglichen Gebrauch eher eine Sonderstellung ein.

            Tatsächlich? Für mich ist die Null der Ursprung aller Messungen, Zählungen und Numerierungen.

            Und wenn du schon konsequent anfangen willst, dann nimm die -128 oder -32678 :-)

            Dann wäre ich ja schon wieder am Ende einer endlichen Skala. :-)

            Datums- und Uhrzeitangaben werden übrigens sehr häufig mit führenden Nullen geschrieben. Um nur ein Beispiel zu nennen.
            Ja, aber auch erst, seit die EDV maßgeblichen Einzug ins Alltagsleben und Formularwesen gehalten hat.

            Nein, das habe ich schon als Schüler in den frühen 80er Jahren als Normalfall erlebt und damals ganz automatisch übernommen, ohne darüber nachzudenken - weil es mir ohnehin "normal" und richtig erschien.

            die Mischung von konstantem Text und alphanumerischen Bestandteilen [...] ist natürlich sehr ungünstig, wenn man dann nach einem der Bestandteile sortieren will.
            Da stimme ich dir völlig zu, bin aber der Meinung, dass das Normalisieren von Daten ist etwas, was man normalerweise erst im Zusammenhang mit der näheren Beschäftigung mit der Datenhaltung kennenlernt.

            Hmm. Ich finde, das ergibt sich ganz von selbst, wenn man darüber nachdenkt, was man eigentlich erreichen möchte.

            Schönen Sonntag noch,
             Martin

            --
            Ist die Katze gesund,
            freut sich der Hund.
  3. Hallöchen,

    ...aber die Suche hat bei mir keine ordentlichen Ergebnisse gebracht... :-S

    Dann hast du vermutlich natsort() nicht gefunden ;)

    MfG
    vaudi