Problem mit der Sortierung eines Arrays

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

  • #16
    endlos?? mit foreach?
    du eröffnest mir neue horizonten...
    sollte doch machbar sein!? neue werte ins array schreiben, in der schleife ... per reset zurücksetzen ... irgendwas ...

    viel komischer finde ich die }; }; }; ... naja, die code-formatierung.

    wer weiß, was sich über dieser schleife befindet

    zeig mal bitte den aktuellen, vollständigen code - den bereich, der sich innerhalb der äußeren schleife befindet. und poste eventuell die ausgabe der endlos-schleife, daran läßt sich doch erkennen, ...
    Zuletzt geändert von derHund; 04.05.2005, 05:31.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #17
      Hier nochmal der aktuelle Code mit der foreach Schleife.

      PHP-Code:

      <?php
      // ordner festlegen
      $pfad "ordner/";
      $tpfad $pfad."thumbs/";

      // bilder array
      $bilder = array();

      // thumbs durchsuchen
      $handle=opendir($tpfad);
      while(
      $file=readdir($handle))   {
         if(
      preg_match("/.(jpg)$/i"$file)){
            
      $bilder[] = $file;
          }
      }
      closedir($handle);
      natsort($bilder);

      //Wieviele bilder?
      $maximal "35";
      //Bilder im Array zählen
      $gesamt count($bilder);

      // Variable in URL kontrollieren 
      if($_GET['seite'] == "" || !is_numeric($_GET['seite']) || $_GET['seite']>ceil($gesamt/$maximal))
      {
      $start 0;
      }
      else
      {
      $start $_GET['seite'] * $maximal;
      }

      //Letztes Bild der Anzeige
      $end $start $maximal;

      //gibts das?
      if($end $gesamt)$end $gesamt;

      //aktuelle Seite mit 35 bildern ausgeben
      for($x $start$x $end$x++)
      {

      //Infos zu den Bildern
      $info getimagesize($pfad.$bilder[$x]);
      $size number_format(round(filesize($pfad.$bilder[$x])),0);
      $breite $info[0];
      $laenge $info[1];

      foreach (
      $bilder as $pic) { 
      echo 
      "<div class=\"img\"><a href=\"".$pfad.$pic."\" target=\"_blank\">
      <img src=\""
      .$tpfad.$pic."\" height=\"100\" width=\"100\"></a>
      <div class=\"titel\">"
      .$breite." x ".$laenge." <br>".$size." KB</div></div>
      "
      ; }; };

      //Seiten
      echo "<br/>";

      //Seitenzahl rausfinden
      $seiten=ceil($gesamt/$maximal);

      if(
      $seiten>1)
      {
      //Links ausgeben
      for($x 1$x <= $seiten$x++)
      {
      $y $x -1;
      echo 
      "<a href=".$_SERVER['PHP_SELF']."?seite=".$y.">Seite ".$x."</a> ";
      }
      }

      ?>
      Wenn das aber über foreach läuft, habe ich, so wie ich das beurteilen kann, keine Möglichkeit, zu bestimmen wieviele Bilder pro Seite angezeigt werden sollen.

      Kommentar


      • #18
        Wenn das aber über foreach läuft, habe ich, so wie ich das beurteilen kann, keine Möglichkeit, zu bestimmen wieviele Bilder pro Seite angezeigt werden sollen.
        richtig. deswegen musst du dir so eine möglichkeit schaffen, indem du einen zähler einbaust, der zyklus für zyklus mitzählt, wieviele bilder foreach bereits durchlaufen hat.

        aber die begriffe $start und $end lassen sich am effektivsten umsetzen, indem man das array um eine bestimmte anzahl der elemente von vorne und hinten beschneidet - ich denke, die brauchst du echt nicht, die bilder unter $start und und nach $end - oder?

        Kommentar


        • #19
          Wie sollte ich das Ganze denn am besten lösen? Ich habe es mit einer for Schleife gemacht, damit ich es eben festlegen kann und damit mir auch am Ende Seitenzahlen zum Blättern ausgegeben werden. Allerdings habe ich auch keine Ahnung wie es mit foreach lösen kann und wie ich genau festlege, dass nur eine eine bestimmte Anzahl von Bildern dargestellt wird und der Rest dann auf den nächsten Seiten.

          Kommentar


          • #20
            habe ich eigentlich schon oben beschrieben. aber ich verdeutliche den gedanken.

            gegeben ist ein array X mit 5 elementen (A, AA, B, C, D).
            du bringst die elemente mit natsort() in die richtige reihenfolge. so besteht X nun aus (A, B, C, D, AA).

            da die schlüssel nun aber auch sortiert sind, bringt eine for-schleife nichts; man weicht auf foreach aus.

            problem: foreach geht ALLES durch, während wir z.b. nur 3 elemente brauchen (B, C, D).

            so extrahiert man die drei elemente, die man braucht. so ist X nun nur noch (B, C, D) und kann mit foreach durchlauft werden.

            soweit klar?

            Kommentar


            • #21
              Was du meinst, habe ich verstanden. Mir war unklar, wie ich es machen soll. Ich denke mit array_slice komme ich weiter. Wie sieht es dann aber mit den restlichen Bildern aus? Werden diese automatisch ausgegeben als Rest oder muss ich festlegen wie es nun weitergeht. Außerdem würde ich gerne wissen, warum ich eine Endlosschleife drin hab? Leigt es vielleicht daran, dass foreach alles durchgeht und nicht mehr aufhört?

              Kommentar


              • #22
                Wie sieht es dann aber mit den restlichen Bildern aus?
                wenn du mit $start und $end arbeitest, gehe ich davon aus, dass nur ($end-$start) bilder pro seite angezeigt werden sollen. drum sind die "restlichen" bilder egal.

                endlosschleife... wenn du deinen code mal formatieren würdest und testausgaben machen würdest, könntest du diese frage selbst beantworten.

                ach ja, und foreach geht alles durch - sobald du in der schleife die array größe nicht veränderst, gibt's so viele durchläufe, wie elemente im array.

                und ich kann mir nicht vorstellen, dass du unendlich viele bilder auf der (unendlich großen?) festplatte hast, sodass das array unendlich groß wird...

                Kommentar


                • #23
                  Die Bilder die pro Seite angezeigt werden sollen, sind in $maximal drin. Also 35. $start und $end waren für die for Schleife gedacht, damit nur eine bestimmte Anzahl von Bildern ausgegeben wird. Da das nun über foreach läuft, kann den Teil des Codes nun entfernen. Mir geht es nun darum, dass die Bilder aus foreach ebenso ausgegeben werden wie mit for. Also eine bestimmte Anzahl pro Seite und der Rest wird dann jeweils auf weitere Seiten verteilt. Die Beschränkung auf 35 Bilder funktiniert soweit. Bei der Endlosschleife war es so, dass immer wieder bei 1 angefangen wurde. Die Bilder wurden dann immer wieder von 1-38 ausgegeben.

                  Kommentar

                  Lädt...
                  X