Lothar: while Schleife mit Zähler?

Hi,

wenn ich mir die Dateien eines Verzeichnisses auflisten lassen möchte, kann ich ja mit:

<?php
if ($handle = opendir('.')) {
   while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
           echo "$file\n";
       }
   }
   closedir($handle);
}
?>

selbiges machen. Da es aber zuviele Dateien sein werden, möchte ich in der URL Anfangswert und Endwert als Parameter übergeben.

Nur wo und wie begrenze ich eine while-schleife mit i=0 und i++ und so?

In einer for-schleife kenn ich das, aber in einer while-shleife? Geht das?

Grüße, Lothar

  1. Hi,

    in der while-Schleife musst du das inkrementieren selbst übernehmen und den Endwert als zusätzlichen Abbruch hinzufügen, also

    $i = $startwert
    while ((false !== ($file = readdir($handle)) ) && ($i < $endwert)) {
       $i++;
    ...

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,

      in der while-Schleife musst du das inkrementieren selbst übernehmen und den Endwert als zusätzlichen Abbruch hinzufügen, also

      $i = $startwert
      while ((false !== ($file = readdir($handle)) ) && ($i < $endwert)) {
         $i++;

      Hi Rouven,

      oh...so einfach :-| Peinlich, peinlich ;-)
      Danke Dir,
      Lothar

    2. Hi,

      in der while-Schleife musst du das inkrementieren selbst übernehmen und den Endwert als zusätzlichen Abbruch hinzufügen, also

      $i = $startwert
      while ((false !== ($file = readdir($handle)) ) && ($i < $endwert)) {
         $i++;

      so begrenzt du die Anzahl der einzulesenden Dateien, der Startwert ist aber egal, d. h. Startwert 5 und Endwert 10 ist das gleiche wie Startwert 10 und Endwert 15. Das ist aber nicht gewünscht. Ich würde sowas vorschlagen:

        
      for($i=0;$i<$startwert;$i++) readdir($handle);  
      for($i=$startwert; $i<$endwert && (false !== ($file = readdir($handle))); $i++)  
      {  
          ...  
      }  
      
      

      Schöne Grüße
      Julian

      1. so begrenzt du die Anzahl der einzulesenden Dateien, der Startwert ist aber egal, d. h. Startwert 5 und Endwert 10 ist das gleiche wie Startwert 10 und Endwert 15. Das ist aber nicht gewünscht. Ich würde sowas vorschlagen:

        Oh yes, you're right...

        MfG
        Rouven

        --
        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      2. hi,

        so begrenzt du die Anzahl der einzulesenden Dateien, der Startwert ist aber egal, d. h. Startwert 5 und Endwert 10 ist das gleiche wie Startwert 10 und Endwert 15. Das ist aber nicht gewünscht.

        Es muss nur noch dafür gesorgt werden, dass erst dann, wenn der Zählerstand den Startwert erreicht hat, die gelesenen Einträge auch verarbeitet werden.

        Ich würde sowas vorschlagen:

        Klar, geht auch.
        while und for sind ja sowieso fast immer austauschbar.
        Aber while finde ich an dieser Stelle doch irgendwie intuitiver und für einen Einsteiger leichter verständlich.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. echo $begrüßung;

    Nur wo und wie begrenze ich eine while-schleife mit i=0 und i++ und so?

    Lass die while vollständig durchlaufen, zähle mit und wenn sich dieser Zähler zwischen $von uns $bis befindet gib aus, was auch immer du darstellen willst. Wenn der Zähler den $bis-Wert überschritten hat kannst du die while-Schleife auch ganz abbrechen.

    echo "$verabschiedung $name";

    1. Hello,

      Lass die while vollständig durchlaufen, zähle mit und wenn sich dieser Zähler zwischen $von uns $bis befindet gib aus, was auch immer du darstellen willst. Wenn der Zähler den $bis-Wert überschritten hat kannst du die while-Schleife auch ganz abbrechen.

      Das ist aber ggf. nicht reproduzierbar.

      Er wird das gesamte Verzeichnis auslesen, dies zwischenspeichern und das zwischengespeicherte Ergebnis dann blockweise ausgeben müssen.

      Das Directory-Listung könnte sich (je nach Betriebssystem und Betrieb auf der Platte) nämlich von einer Abfrage zur anderen verändern in Reihenfolge und Anzahl.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  3. Hallo Lothar,

    <?php  
    $dir=array();  
    $spa=50;        # wieviel Namen ausgegeben werden sollen  
    if([link:http://de3.php.net/manual/de/function.substr.php@title=substr]([link:http://de3.php.net/manual/de/function.phpversion.php@title=phpversion](),0,1)=='5'){  
            $dir=[link:http://de3.php.net/manual/de/function.scandir.php@title=scandir]('.');  
    }  
    else{  
            if($d=[link:http://de3.php.net/manual/de/function.opendir.php@title=opendir]('.')){  
                    while(false!==($file=[link:http://de3.php.net/manual/de/function.readdir.php@title=readdir]($d))){  
                            if ($file!="." && $file!=".."){  
                                    $dir[]=$file;  
                            }  
                    }  
                    [link:http://de3.php.net/manual/de/function.closedir.php@title=closedir]($d);  
            }  
    }  
    if(!empty($dir)){  
            echo "<dir>";  
            for($i=$_SERVER['QUERY_STRING'];$i<($_SERVER['QUERY_STRING']+$spa);$i++){  
                    if(!isset($dir[$i])){  
                            break;  
                    }  
                    echo "<li>".$dir[$i]."</li>";  
            }  
            echo '</dir><a href="'.$_SERVER['PHP_SELF'].'?'.($_SERVER['QUERY_STRING']+$spa).'">weiter</a>';  
    }  
    ?>
    

    Gruß aus Berlin!
    eddi