PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 2d-Array ordnen?



~Gh05t~
18-01-2003, 21:37
Hiho,
ich hab hier ein 2 demensionales Array das ein paar daten wie u.a. ein Datum im Format "Y-m-d H:i:s" (mysql -> datetime) enthällt.
Wie kann ich dieses array so sortieren, dass die aktuellsten felder am anfang stehen?

Bsp.:
Array vorher:
$array[0][date] = "2003-01-1 9:00:00"
$array[1][date] = "2003-01-3 9:00:00"
$array[2][date] = "2003-01-2 9:00:00"

Array nachher:
$array[0][date] = "2003-01-3 9:00:00"
$array[1][date] = "2003-01-2 9:00:00"
$array[2][date] = "2003-01-1 9:00:00"

thx4help

mehlvogel
18-01-2003, 22:09
Eien Mischung aus usort und strcmp dürfte hier hilfreich sein:




function sortdate($a, $b) {
return strcmp($a['date'], $b['date']);
}

usort($array, "sortdate");


Für genauere Information: Klickst du hier! (http://de3.php.net/manual/en/function.usort.php)

~Gh05t~
18-01-2003, 22:32
nice, thx....
und wie drehe ich das array um?
Also das die neuesten felder am anfang stehen?

mehlvogel
18-01-2003, 22:53
Entweder nach dem Aufruf ein array_reverse oder beim sortieren also $a und $b austauschen.

Sortierfunktion änern:


function sortdate($a, $b) {
return strcmp($b['date'], $a['date']);
}


array_reverse:


// Hierbei gilt die Alte sortdate Funktion
usort($array, sortdate);
array_reverse($array);


Würde generell zur ersteren Methode greifen, da dort der extra aufruf von array_reverse vermieden wird. Aber wenn der User entscheiden darf, in welche Richtung das ausgegeben wird, dann kann auch das array_reverse sinnvoll sein.

~Gh05t~
19-01-2003, 12:38
Thx, das hilft schon recht gut...

Aber ich hab noch n anderes Problem:
Wie kann ich die ein Delta Zeit ausrechnen?
Also die zeit zwischen 2 zeiten?

mehlvogel
19-01-2003, 16:22
Vielleicht kannst du die Strings mit strtotime in UNIX Tiemstamps umwandeln und dann vergleichen? Also in etwa so:



$unterschied = strtotime($array[1]) - strtotime($array[2]);
// Der Unterschied in Sekunden


mit ein wenig rechnerei könntest du dann ausrechnen, wieviel Zeit dazwischen liegt.

Manual: strtotime (http://de3.php.net/manual/en/function.strtotime.php)

Vielleicht ist es generell besser in der DB den Timestamp zu speichern (mit Spaltenformat INT) - denn dann könnte SQL die gleich sortieren - was wesentlcih einfacher ist. Wenn es die Strutktur zulässt.