array formatieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array formatieren

    hallo zusammen,

    ich würde mir gerne bilder aus verschiedenen verzeichnissen per php anzeigen lassen.

    die verzeichnisstruktur sieht so aus:

    PHP-Code:
    pix/
       
    23.04.06/
          
    thumbs/
          
    bild_1800.jpg
          bild_1801
    .jpg
          bild_1802
    .jpg
       bild_1800
    .jpg
       bild_1801
    .jpg
       bild_1802
    .jpg
       21.04.06
    /
          
    thumbs/
          
    bild_1784.jpg
          bild_1788
    .jpg
          bild_1783
    .jpg
       bild_1784
    .jpg
       bild_1788
    .jpg
       bild_1783
    .jpg 
    usw.

    auslesen tue ich diese verzeichnisse mit diesem script:

    PHP-Code:
    <?
    function ls($dir){
       $handle = opendir($dir);
       for(;(false !== ($readdir = readdir($handle)));){
           if($readdir != '.' && $readdir != '..' && $readdir != "thumbs"){
               $path = $dir.'/'.$readdir;
               if(is_dir($path))    $output[$readdir] = ls($path);
               if(is_file($path) && substr($path,-4) == '.jpg')    $output[] = $readdir;
           }
       }
       return isset($output)?$output:false;
       closedir($handle);
    }

    $ary = ls('pix');

    echo '<pre>';
    print_r($ary);
    echo '</pre>';
    ?>
    zu sehen ist das ganze auch online hier

    nun meine frage:

    wie kann ich die ausgabe des arrays so formatieren, dass mir immer zuerst das verzeichnis mit dem aktuellsten namen (der name der verzeichnisses ist ja das datum) angezeigt wird und darunter immer die bilder die in diesem ordner gespeichert sind. die bilder sollten dann so sortiert sein, dass das mit der höchsten nummer oben steht?

    so sollte dann quasi das ergebins aussehen:
    PHP-Code:
    23.04.06<br>
    <
    a href="pix/bild_1802.jpg" target="main"><img src="pix/thumbs/bild_1802.jpg" border="0" alt="">
    <
    br>bild_1802.jpg</a><br>
    <
    a href="pix/bild_1801.jpg" target="main"><img src="pix/thumbs/bild_1801.jpg" border="0" alt="">
    <
    br>bild_1801.jpg</a><br>
    <
    a href="pix/bild_1800.jpg" target="main"><img src="pix/thumbs/bild_1800.jpg" border="0" alt="">
    <
    br>bild_1800.jpg</a><br>
    <
    br>
    21.04.06<br>
    <
    a href="pix/bild_1788.jpg" target="main"><img src="pix/thumbs/bild_1788.jpg" border="0" alt="">
    <
    br>bild_1788.jpg</a><br>
    <
    a href="pix/bild_1784.jpg" target="main"><img src="pix/thumbs/bild_1784.jpg" border="0" alt="">
    <
    br>bild_1784.jpg</a><br>
    <
    a href="pix/bild_1783.jpg" target="main"><img src="pix/thumbs/bild_1783.jpg" border="0" alt="">
    <
    br>bild_1783.jpg</a><br>
    <
    br
    vielen dank für eure antworten im voraus
    gruss
    tanaka
    Zuletzt geändert von tanaka; 25.04.2006, 16:35.

  • #2
    also erstmal mit http://de.php.net/manual/en/function.filemtime.php rausfinden welche Daten am aktuellesten sind. Im Anschluss kannst dann sortiert jeden Ordner auslesen und in dabei mit http://de2.php.net/array_mulitsort ASC oder DESC sortieren.

    thats it

    dani

    Kommentar


    • #3
      PHP-Code:
      function my_sort($a,$b){
        
      $a=explode(".",$a);
        
      $a=strval($a[2].$a[1].$a[0]);
        
      $b=explode(".",$b);
        
      $b=strval($b[2].$b[1].$b[0]);
        
      $a=intval($a);
        
      $b=intval($b);
        if (
      $a == $b) {
             return 
      0;
         }
         return (
      $a $b) ? -1;
      }

      uksort($ary,"my_sort");
      //echo "<pre>";print_r($ary);echo "</pre>";
      //jetzt haben wir die ordner nach datum sortiert
      //und können alles ausgeben und dateien sortieren
      foreach($ary as $k=>$ar){
        echo 
      "<b>".$k."</b><br />\n";
        
      array_multisort($ar,SORT_DESC );
        foreach(
      $ar as $a){
          echo 
      "<a href='$a'target=\"main\"><img src=\"$k/$a\" border=\"0\" alt=\"\" />";
          echo 
      "<br>$a</a><br>";
        }

      Slava
      bituniverse.com

      Kommentar


      • #4
        hallo,

        @daniela:
        danke für deine antwort, aber mit filetime kann ich in meinen fall nichts anfangen. ich wüsste zumindest nicht wie?
        das mit dem multisort habe ich schon versucht gehabt, aber nicht hinbekommen.

        @slava:
        WOW! vielen herzlichen dank für das script.
        läuft prima. musste nur einige kleine anpassungen machen.

        das 'fertige' sieht so aus:

        PHP-Code:
        <?
        $pixdir = "pix/";
        $thumbdir = "thumbs/";

        function ls($dir){
           $handle = opendir($dir);
           for(;(false !== ($readdir = readdir($handle)));){
               if($readdir != '.' && $readdir != '..' && $readdir != "thumbs"){
                   $path = $dir.'/'.$readdir;
                   if(is_dir($path))    $output[$readdir] = ls($path);
                   if(is_file($path) && substr($path,-4) == '.jpg')    $output[] = $readdir;
               }
           }
           return isset($output)?$output:false;
           closedir($handle);
        }

        function my_sort($a,$b){
          $a=explode(".",$a);
          $a=strval($a[2].$a[1].$a[0]);
          $b=explode(".",$b);
          $b=strval($b[2].$b[1].$b[0]);
          $a=intval($a);
          $b=intval($b);
          if ($a == $b) {
               return 0;
           }
           return ($a > $b) ? -1 : 1;
        }

        $ary = ls($pixdir);

        uksort($ary,"my_sort");

        foreach($ary as $k=>$ar){
          echo "<b>".$k."</b><br>\n";
          $k .= "/";
          array_multisort($ar,SORT_DESC );
          foreach($ar as $a){
            echo "<a href=\"$pixdir$k$a\" target=\"main\">
        <img src=\"$pixdir$k$thumbdir$a\" border=\"0\" alt=\"\"><br>
        $a</a><br>\n";
          }
        }
        ?>
        das href=\"$pixdir$k$a\" und das src=\"$pixdir$k$thumbdir$a\" kann man bestimmt auch 'eleganter schreiben, nur weiss ich nicht wie.
        evtl. hat da noch jemand eine idee?

        ansonsten nochmals danke für die schnelle hilfe.
        gruss
        tanaka

        Kommentar


        • #5
          <<src=\"$pixdir$k$thumbdir$a\" kann man bestimmt auch 'eleganter schreiben,>>
          ja natürlich!!!
          du muss einfach schriftart in editer wechseln
          Slava
          bituniverse.com

          Kommentar


          • #6

            Kommentar


            • #7
              PHP-Code:
              function ls($dir){
                 
              $handle opendir($dir);
                 for(;(
              false !== ($readdir readdir($handle)));){
                     if(
              $readdir != '.' && $readdir != '..' && $readdir != "thumbs"){
                         
              $path $dir.'/'.$readdir;
                         if(
              is_dir($path))    $output[$readdir] = ls($path);
                         if(
              is_file($path) && substr($path,-4) == '.jpg')    $output[] = $readdir;
                     }
                 }
                 return isset(
              $output)?$output:false;
                 
              closedir($handle);

              Du weißt aber schon das ein closedir nach return käse ist??

              Kommentar


              • #8
                @PHP-Desaster:

                hallo,
                wieso ist das käse? und wo sollte das closedir dann stehen?

                gruss
                tanaka

                Kommentar


                • #9
                  Original geschrieben von tanaka
                  wieso ist das käse?
                  Weil es an der Stelle gar nicht mehr ausgeführt wird.
                  und wo sollte das closedir dann stehen?
                  Mit return verlässt du die Funktion - als wäre es doch wohl besser davor aufgehoben, oder?
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    @wahsaga:

                    vielen dank.
                    habs nun vor das return gestellt.

                    gruss
                    tanaka

                    Kommentar


                    • #11
                      Original geschrieben von tanaka
                      @wahsaga:
                      habs nun vor das return gestellt.
                      .... und dir hoffentlich Gedanken darüber gemacht warum.
                      Sprich: verstanden was man dir gesagt hat.

                      Kommentar


                      • #12
                        @shapeless:

                        hallo,

                        ja.

                        ich hatte nach PHP-Desasters post nachgeschaut ( hier )

                        Wird die return() Anweisung innerhalb einer Funktion aufgerufen, wird die Ausführung der Funktion sofort beendet und das Argument als Wert des Funktionsaufrufs zurückgegeben.
                        danach war mir das dann auch klar, dass das closedir vor das return gehört.

                        an dieser stelle auch nochmal danke an PHP-Desaster für den hinweis.

                        gruss
                        tanaka

                        Kommentar

                        Lädt...
                        X