philippo: array nach daten sortieren

Hallo

ich habe folgendes Array

$news[0]['title'] = 'Test';
 $news[0]['datum'] = '30.07.2004';
 $news[1]['title'] = 'Test';
 $news[1]['datum'] = '01.08.2004';

Das sortirre ich wie folgt:

function multisort($a,$b)
     {
        if ($a["datum"] == $b["datum"])
        return ($a["datum"] < $b["datum"]) ? -1 : 1;
     }
  usort ($news, "multisort");

Nur leider wird das mit den Dten sortieren nix.. Wie bekomme ich es hinn?

Gruß
philippo

  1. hi,

    $news[0]['datum'] = '30.07.2004';
    $news[1]['datum'] = '01.08.2004';

    Nur leider wird das mit den Dten sortieren nix..

    natürlich nicht.
    der eine string fängt mit einer "0" an, der andere mit einer "3". welcher ist also "größer"?

    Wie bekomme ich es hinn?

    durch ein besser sortierfähiges datenformat, beispielsweise "2004.08.01" / "2004.07.30"

    bis zu "2004.0" sind beide "gleich groß", danach folgen eine "8" bzw. eine "7". also ist "2004.07.30" kleiner als "2004.08.01".

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Nur leider wird das mit den Dten sortieren nix..

      durch ein besser sortierfähiges datenformat, beispielsweise "2004.08.01" / "2004.07.30"

      besser noch 20040801 / 20040730

      oder die mktime-funktion nutzen und 'wirkliche' Datumsangaben vergleichen - das funktioniert sehr zuverlaessig

      1. hi,

        durch ein besser sortierfähiges datenformat, beispielsweise "2004.08.01" / "2004.07.30"

        besser noch 20040801 / 20040730

        na ja, "besser" ist gewagt.

        es vereinfacht das sortieren ggf. geringfügig, weil die immer gleichen punkte nicht auch noch mit verglichen werden müssen. dürfte von der performance her bei einer anwendung "normalen" umfangs allerdings unerheblich sein.

        und wenn man das datum noch weiter braucht, wäre vielleicht ein etwas "lesbareres" format nicht schlecht (kann man z.b. leichter aufsplitten).

        oder die mktime-funktion nutzen und 'wirkliche' Datumsangaben vergleichen - das funktioniert sehr zuverlaessig

        jepp, wäre insb. zu empfehlen, wenn die datumsangaben evtl. sogar ursprünglich als timestamp vorliegen, dann könnte man erst nach dem sortieren zum ausgeben umwandeln.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
  2. Hallo,

    if ($a["datum"] == $b["datum"])
            return ($a["datum"] < $b["datum"]) ? -1 : 1;

    also, ich bin ja kein PHP-Experte, aber in allen mir bekannten Programmiersprachen würde das "return" nur ausgeführt, wenn die zu vergleichenden Elemente gleich sind. Muss die Zeile "if ..." nicht weg?
    Zu den anderen Antworten: Man könnte in der Vergleichsroutine auch das Datum in etwas Vergleichbares, wie z.B. von wahsaga oder roebert vorgeschlagen, umrechnen oder Jahr, Monat und Tag einzeln vergleichen.

    Gruß, Jürgen