array nach daten sortieren
philippo
- php
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
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
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
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
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