Daten sortiert ausgeben mit php



  • Hi
    folgendes Problem ich bastel grad an ein einer kleinen Gallerie in der alle Bilder zu den jeweiligen Events in Ordnern mit dem Eventnamen gespeichert werden.

    Wenn ich jetzt das Gallerieverzeichnis auslesen will möchte ich das die Ordner nach Datum der Erstellung absteigend sortiert werden wie kann ich das in PHP realisieren?.

    Momentan siehts so aus:

    $Verzeichniss = opendir("../bilder");
      while($file = readdir($Verzeichniss)){
       if($file != "." && $file != ".." && $file[0] != "."){
       $Events[] = $file;
       }
      }
      $Eventzahl = count($Events);
    
       for($i=$Eventzahl-1; $i >=0; $i--){ 
        echo "<a href=\"pics_loeschen.php?action=auswaehlen&name=".$Events[$i]."\">".$Events[$i]."</a><br>";
       }
    

    MFG eiskalt



  • Da die Dateisortierung, die dir PHP liefert, imho vom Betriebssystem abhängt, bleibt dir da wohl nichts anderes übrig, als sämtliche Verzeichnisse auszulesen und anhand ihres Datums manuell zu sortieren.

    filectime() müsste auch mit Verzeichnissen zurecht kommen.



  • Hi ich kriegs net hin bei folgendem code tut sich garnix wo liegt der fehler ich finds einfach net.
    In den Array $Events werden alle Ordnernamen eines Verzeichnises reingeschrieben
    -> Das passt.
    In $sorterarray wird das Datum der Ordner reingeschrieben -> Das passt;
    In $datum wird das Datum der Ordner in der Reihenfolge wie sie auch auf dem Dateisystem liegen reingeschrieben -> Das passt auch.
    Aber bei der Ausgabe(letzte forschleife) haperts. Da passiert garnix.
    Hab ich das array $bilderausgabe falsch erzeugt oder geht das so überhaupt nicht? 😕

    /*-------------------Datum von Ordnern in Array schreiben ---------------------*/
      for($i=0; $i < $Eventzahl; $i++){
      $datum_bilder[] = filemtime("../bilder/".$Events[$i]);
      $sortierarray[] = date("ymdhi", $datum_bilder[$i]);
      }
    /*----------------------------------------------------------------------------*/
    
    /*----------------------Daten sortieren---------------------------------------*/
      sort($sortierarray);
    /*----------------------------------------------------------------------------*/
    
    /*----------------------Daten in der reinhenfolge in der sie eingelesen werden ins array schreiben-------------------*/
     for($i=$Eventzahl; $i >=0; $i--){ 
       $datum[] = date("ymdhi", $datum_bilder[$i]);
      }
    /*-------------------------------------------------------------------------------------------------------------------*/
    
    /*----- asssoziatives Array erzeugen mit Datum als index für dateinamen -----*/
      for($i=$Eventzahl; $i >=0; $i--){ 
        $bilderausgabe = array($datum[$i] => $Events[$i]);
       }
    /*---------------------------------------------------------------------------*/
    
      for($i=$Eventzahl; $i >=0; $i--){ 
       $index_bildname = $sortierarray[$i];
       echo $bilderausgabe[$index_bildname]."<br>";
      }
    

    [edit]
    wenn ich die arrays $sortierarray und $datum miteinander vergleiche dann steht in beiden auch das selbe drin. nur eben unterschiedlich sortiert.
    [/edit]

    MFG eiskalt



  • eiskalt schrieb:

    for($i=$Eventzahl; $i >=0; $i--){ 
        $bilderausgabe = array($datum[$i] => $Events[$i]);
       }
    

    Dein Problem ist, dass du das Array $bilderausgabe immer wieder neu anlegst.

    Richtig wäre:

    $bilderausgabe = array();
    for($i=$Eventzahl; $i >=0; $i--){ 
        $bilderausgabe[$datum[$i]] = $Events[$i];
       }
    

    Damit legst du einmal das Array an und erzeugst dann immer die neuen Schlüssel mit entsprechenden Werten.

    [Edit]
    Viel besser und mit viel weniger Code könntest du das Problem vermutlich mit ksort() lösen.
    [Edit]



  • $bilderausgabe[$datum[$i]] = $Events[$i];
    

    Das das geht hab ich nicht gedacht ich war der Ansicht das muss ich beim erzeugen des Arrays machen aber ok. ksort is mir auch nimmer eingefallen son mist kommt davon wenn nebenher die Glotze läuft.

    THX eiskalt



  • Für das hier: http://tggc.tg.funpic.de/index.php?cat=8 benutze ich

    usort( $arrData, "cmpEntries" );
    

    Bye, TGGC (Das Jahr des Helden)



  • hi wenn ich aber ksort nehm kann ich doch nimmer mit

    for($i=$Eventzahl; $i >=0; $i--){ 
     $bildausgabe[$i];
     }
    

    auf den array zugreifen zumindestens passiert da bei mir nix als brauch ich nen zweiten array in den ich die indexes schreib.

    THX eiskalt



  • Nö. Dafür gibt's ja aber

    http://www.php.net/foreach


Anmelden zum Antworten