Anzeige:
Ergebnis 1 bis 6 von 6

Thema: 2d-Array ordnen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74

    2d-Array ordnen?

    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
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Eien Mischung aus usort und strcmp dürfte hier hilfreich sein:


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

    usort($array"sortdate"); 
    Für genauere Information: Klickst du hier!
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    nice, thx....
    und wie drehe ich das array um?
    Also das die neuesten felder am anfang stehen?
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Entweder nach dem Aufruf ein array_reverse oder beim sortieren also $a und $b austauschen.

    Sortierfunktion änern:
    PHP-Code:
    function sortdate($a$b) {
       return 
    strcmp($b['date'], $a['date']);

    array_reverse:
    PHP-Code:
    // Hierbei gilt die Alte sortdate Funktion 
    usort($arraysortdate);
    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.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    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?
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Vielleicht kannst du die Strings mit strtotime in UNIX Tiemstamps umwandeln und dann vergleichen? Also in etwa so:

    PHP-Code:
    $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

    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.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •