array_multisort sortiert nich richtig

  • Hey,


    ich habe versucht den Terminkalender von php-kurs.com nachzubauen. Jetzt habe ich ein Problem.


    Wenn ich array_multisort andwende werden die Termine nach den Datums nicht richtig geordnet. Verstehe es nicht.


    Ausgabe der Tabelle siehe Bild.


    mit var_dump auf $termin kommt dies raus :

    Code
    1. array(6) { [0]=> string(10) "10.09.2017" [1]=> string(10) "16.10.2017" [2]=> string(10) "18.10.2017" [3]=> string(10) "22.12.2017" [4]=> string(10) "25.09.2022" [5]=> string(10) "25.10.2018" }

    Warum ist das Datum 25.09.2022 nicht am Ende ? Verstehe ich nicht.


    Mein Code:


    Dateien

    • tabelle.PNG

      (9,43 kB, 14 Mal heruntergeladen, zuletzt: )
  • Das ist das Wesen einer Sortierung von Strings: Das was links steht, hat, wie bei einem nummerischen Wert, das höchste Gewicht, daher stehen die beiden 25. am Ende und die Reihenfolge wird durch den Monat definiert. Das Jahr hat dagegen das niedrigste Gewicht, da es rechts steht.

    Solle sich lösen lassen, indem Du usort mit einer geeigneten Vergleichsfunktion verwendest.

  • Ich empfehle Dir DATE zu nutzen (Du nutzt bestimmt gerade VARCHAR bei "termin")


    Siehe https://www.php-kurs.com/beisp…nder-in-php-und-mysql.htm


    Code
    1. CREATE TABLE `termine` (
    2. `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    3. `datum` DATE NOT NULL ,
    4. `titel` VARCHAR( 256 ) NOT NULL ,
    5. `beschreibung` BLOB NOT NULL
    6. ) ENGINE = MYISAM ;

    `datum` DATE

    Bei Dir ist das Feld "termin" genannt.

    Dein Feld "termin "sollte also so aussehen:

    Code
    1. `termin` DATE NOT NULL

    Beim einfügen der Daten musst Du dann natürlich auf das Format achten: 'Y-m-d H:i:s'

    (siehe bsp http://php.net/manual/de/datet…-datetime.format-examples)


    Beim lesen der Daten bekommst Du dann zB 2017-10-14 20:25:00

    Das entspricht Jahr-Monat-Tag Stunden:Minuten:Sekunden

    Das lässt sich dann auch leicht sortieren.

    (Natürlich kannst Du auch schon beim Auslesen der Daten sortieren. zB "SELECT * FROM `table` WHERE ... ORDER BY `termin` ASC;")

  • Hey,


    Ok. Vielen Dank für den Tipp. Wenn ich solche Daten aus der DB hole werde ich dies beachten.


    Ich habe die Daten nur als Simulation in einem array erstellt.