Arraysortierung nach Datum

  • PHP

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Link.

    Arraysortierung nach Datum

    Hallo,

    ich habe ein Problem, ich verwende eine Funktion um ein Array das mit Objekten gefüllt ist nach einem Datum-Attribut zu sortieren.
    Das Problem jedoch ist, dass die Sortierung zwar ganz gut ist, aber immerwieder zwischendrin falsch sortiert wurde... somit ist diese funktion sinnlos für mich.
    Kann mir evtl. jemand weiterhelfen?

    Wenn ihr noch weiter Einblick in den Code haben möchtet, bitte bescheid sagen!


    Quellcode

    1. function sort_arr($arr) {
    2. if ($arr != null) {
    3. foreach ($arr as $sf) {
    4. $date = $sf->get_meta("meta_datum"); // datum ist im format dd.mm.yyyy
    5. $day = explode(".", $date)[0];
    6. $month = explode(".", $date)[1];
    7. $year = explode(".", $date)[2];
    8. $sf->tmpAttribute = $year . "-" . $month . "-" . $day;
    9. }
    10. uasort($arr, function($a, $b) {
    11. $aval = strtotime($a->tmpAttribute );
    12. $bval = strtotime($b->tmpAttribute );
    13. if ($aval == $bval) {
    14. return 0;
    15. }
    16. return $aval < $bval ? 1 : -1;
    17. });
    18. return $arr;
    19. }
    20. return null;
    21. }





    Hier ein kleiner Ausschnitt nach dem Sortieren
    die orangen daten sind fehlerhaft bzw. sollten an einer anderen stelle "hinsortiert" werden.

    14.10.2014
    16.09.2014
    17.09.2014
    25.09.2014
    30.09.2014
    02.10.2014
    02.10.2014
    02.10.2014
    10.10.2014
    10.10.2014
    11.10.2014
    30.09.2014
    12.11.2014
    13.11.2014
    18.11.2014
    Wenn du php 5.2.2 ++ verwendest kannst einfach die DateTime Klasse nehmen und diesen Teil:

    PHP-Quellcode

    1. uasort($arr, function($a, $b) {
    2. $aval = strtotime($a->tmpAttribute );
    3. $bval = strtotime($b->tmpAttribute );
    4. ändern zu
    5. uasort($arr, function($a, $b) {
    6. $aval = new DateTime($a->tmpAttribute );
    7. $bval = new DateTime($b->tmpAttribute );
    8. }
    Das ist meine Signatur und sie wird wunderbar sein!
    Hi,

    kommt auch drauf an wie dir die Daten vorliegen. Als Timestamp? Oder bereits formatiert, z.B. Y-m-d oder d.m.Yoder ... ?
    Weil theoretisch kannst du ja auch das Datum z.B. in das Format ​Ymd bringen oder es in nen timestamp konvertieren, und im Endeffekt reicht dann die normale Sortierung, weil er dann erkennt dass es Integer ist. Und erst bei der Ausgabe halt dann das Datum entsprechend formatieren (​d.m.Y).

    Link :thumbup:
    Hello World