Chris1996: foreach & Limit

Guten Tag,

mein Script sieht wie folgt aus:

  
                      <?php  
  
		$bv = "klein";  
		$verzeichnis = opendir($bv);  
		$bilder = array();  
		$i = 0;  
		while (($datei = readdir ($verzeichnis)) !==false  && $i <= 4) {  
		  
			if (preg_match("/\.jpe?g$/",$datei)) {  
			  
				$bilder[] = $datei;  
			  }  
		}  
		  
		closedir($verzeichnis);  
		  
		foreach($bilder as $bild) {  
		$i++;  
			echo "<img src='klein/$bild' class='ref-bild' width='188' height='146' alt='Bild'>\n";  
		  
		if (($i%2)==0) {  
			echo "<br>";  
}}  
		  
  
?>  

es werden alle Bilder angezeigt! Er beachtet mein Limit in der foreach  nicht. Was mache ich falsch?

  1. hi,

    Guten Tag,

    mein Script sieht wie folgt aus:

    <?php

      $bv = "klein";  
      $verzeichnis = opendir($bv);  
      $bilder = array();  
      $i = 0;  
      while (($datei = readdir ($verzeichnis)) !==false  && $i <= 4) {  
        
      	if (preg_match("/\.jpe?g$/",$datei)) {  
      	  
      		$bilder[] = $datei;  
      	  }  
      }  
        
      closedir($verzeichnis);  
        
      foreach($bilder as $bild) {  
      $i++;  
      	echo "<img src='klein/$bild' class='ref-bild' width='188' height='146' alt='Bild'>\n";  
        
      if (($i%2)==0) {  
      	echo "<br>";  
    

    }}

    ?>

    
    >   
    > es werden alle Bilder angezeigt! Er beachtet mein Limit in der foreach  nicht. Was mache ich falsch?  
      
    Wasn für ein Limit? Gib dir doch mal mit var\_dump($i) im foreach dein $i aus. Vielleicht siehst du ja dann den/einen Fehler.  
      
    mfg  
      
    tami
    
    1. Hallo,

      Wasn für ein Limit? Gib dir doch mal mit var_dump($i) im foreach dein $i aus. Vielleicht siehst du ja dann den/einen Fehler.

      Nun sehe ich hiner jedem Bild ein  int(9) mit einer jeweils anderen Zahl. Mein Limit geht nicht

      1. hi,

        Hallo,

        Wasn für ein Limit? Gib dir doch mal mit var_dump($i) im foreach dein $i aus. Vielleicht siehst du ja dann den/einen Fehler.

        Nun sehe ich hiner jedem Bild ein  int(9) mit einer jeweils anderen Zahl. Mein Limit geht nicht

        Ich weiß immer noch nicht, was Du mit deine "limit" meinst. Du hast ja keine Abbruchbedingung und fängts das $i bereits in der While-Schleife an zu zählen. Dass da überhall eine 9 kommt, kann eigentlich nicht sein. Du zählst das $i ja trotzdem hoch ...;

        Bau dir erstmal eine foreach nur mit Zähler, das funktioniert. Wenn das funktioniert, bau den Rest dazu. Da findest Du in Nullkommanix Deinen Fehler.

        mfg

        tami

      2. Mahlzeit,

        Nun sehe ich hiner jedem Bild ein  int(9) mit einer jeweils anderen Zahl. Mein Limit geht nicht

        Und wenn es sich um eine gerade Zahl handelt, siehst du dann im Quelltext auch das <br>?
        Wenn du schon Quelltext ausgibst (ich vermute, das meinst du mit Limit, was aber keins ist), schau nach ob er da ist.

        --
        42
        1. Und wenn es sich um eine gerade Zahl handelt, siehst du dann im Quelltext auch das <br>?
          Wenn du schon Quelltext ausgibst (ich vermute, das meinst du mit Limit, was aber keins ist), schau nach ob er da ist.

          Ja, mein <br> ist da.

          1. hi,

            Und wenn es sich um eine gerade Zahl handelt, siehst du dann im Quelltext auch das <br>?
            Wenn du schon Quelltext ausgibst (ich vermute, das meinst du mit Limit, was aber keins ist), schau nach ob er da ist.

            Ja, mein <br> ist da.

            Ja, aber du die Whileschleife bricht nicht ab ...; deshalb liest Du dir auch mehr als 4 Bilder rein. Und foreach zählt dann bis 9 hoch ...;

            mfg

            tami

          2. Mahlzeit,

            Ja, mein <br> ist da.

            Dann macht dein Code exakt das, was er soll. Wenn das was anderes ist, als du erwartest, solltest du in den anderen Posting Lösungsansätze finden.

            --
            42
            1. Hallo,

              hab es so gemacht:

                
              foreach($bilder as $bild) {  
              if(++$i > 2) break;  
              
              
              1. hi,

                Hallo,

                hab es so gemacht:

                foreach($bilder as $bild) {
                if(++$i > 2) break;

                  
                Das ist mal ne Abbruchbedingung!  
                  
                Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?  
                  
                mfg  
                  
                tami
                
                1. Hallo,

                  Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?

                  "Denn sie wissen nicht, was sie tun."

                  *scnr*
                   Martin

                  --
                  Wenn man keine Ahnung hat - einfach mal Fresse halten.
                    (Dieter Nuhr, deutscher Kabarettist)
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                  1. hi,

                    Hallo,

                    Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?

                    "Denn sie wissen nicht, was sie tun."

                    Jo. https://forum.selfhtml.org/?t=217322&m=1492420 ...

                    mfg

                    tami

                2. Mahlzeit,

                  Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?

                  Wir sollten froh sein, dass PHP beliebter ist als Sprengstoff. Mit PHP kann man weniger kaputtmachen, wenn man ohne Grundwissen irgendwas zusammenbastelt und glaubt man wäre Programmierer.

                  --
                  42
                  1. hi,

                    Mahlzeit,

                    Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?

                    Wir sollten froh sein, dass PHP beliebter ist als Sprengstoff. Mit PHP kann man weniger kaputtmachen, wenn man ohne Grundwissen irgendwas zusammenbastelt und glaubt man wäre Programmierer.

                    Ja, das ist doch aber auch das schöne daran, das junge Leute erstmal damit rumspielen können ...; dabei _muss_ man doch erstmal Fehler machen, ums zu lernen ...;

                    mfg

                    tami

                    1. Mahlzeit,

                      Ja, das ist doch aber auch das schöne daran, das junge Leute erstmal damit rumspielen können ...; dabei _muss_ man doch erstmal Fehler machen, ums zu lernen ...;

                      Absolut richtig. :)

                      --
                      42
                  2. Mit PHP kann man weniger kaputtmachen, wenn man ohne Grundwissen irgendwas zusammenbastelt und glaubt man wäre Programmierer.

                    wo habe ich gesagt dass ich Programmierer bin? Ich bitte dich, mir hier nichts zu untertellen! Ich mache das für meine private Seite um ein paar Bilder zu zeigen, die ich erstellt, mehr nicht.

                    1. hi,

                      Mit PHP kann man weniger kaputtmachen, wenn man ohne Grundwissen irgendwas zusammenbastelt und glaubt man wäre Programmierer.

                      wo habe ich gesagt dass ich Programmierer bin? Ich bitte dich, mir hier nichts zu untertellen! Ich mache das für meine private Seite um ein paar Bilder zu zeigen, die ich erstellt, mehr nicht.

                      Ganz ruhig, er will nur spielen ;-).

                      mfg

                      tami

                    2. Mahlzeit,

                      wo habe ich gesagt dass ich Programmierer bin? Ich bitte dich, mir hier nichts zu untertellen! Ich mache das für meine private Seite um ein paar Bilder zu zeigen, die ich erstellt, mehr nicht.

                      Das war ne allgemeine Aussage und nicht gegen dich gerichtet ;) Also bitte nicht beleidigt sein, das war nicht meine Absicht.

                      --
                      42
                      1. Das war ne allgemeine Aussage und nicht gegen dich gerichtet ;) Also bitte nicht beleidigt sein, das war nicht meine Absicht.

                        Ok, dann habe ich das falsch verstanden :)

                3. Hallo,

                  Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?

                  Hab es jetzt etwas umgebaut und das das $i entfernt

                    
                                        <?php  
                    
                  		$bv = "klein";  
                  		$verzeichnis = opendir($bv);  
                  		$bilder = array();  
                  		$i = 0;  
                  		while (($datei = readdir ($verzeichnis)) !==false) {  
                  		  
                  			if (preg_match("/\.jpe?g$/",$datei)) {  
                  			  
                  				$bilder[] = $datei;  
                  			  }  
                  		}  
                  		  
                  		closedir($verzeichnis);  
                  		  
                  		foreach($bilder as $bild) {  
                  		if(++$i > 6) break;  
                  		echo "<img src='$bild' class='ref-bild' width='188' height='146' alt='Bild'>";  
                  		  
                  		}  
                  		  
                    
                  ?>  
                  
                  

                  bei jedem dritten Bild muss das padding-right entfertn werden, dazu nutze ich JS, das sieht so aus:

                    
                  $(document).ready(function(){  
                        var counter=1;  
                          $('div.referenzen img').each(function(){  
                             if(counter % 3==0){  
                               $(this).css('padding-right','0');  
                             }  
                              counter++;  
                          });  
                  });  
                  
                  

                  oder könnte ich das auch mit PHP bzw. mit CSS machen?

                  1. Mahlzeit,

                    Hab es jetzt etwas umgebaut und das das $i entfernt

                    Ohne dich überfordern zu wollen, wieso machst du die Ausgabe nicht direkt in der while-Schleife?
                    Würde einen Durchlauf sparen und damit die Geschwindigkeit massiv erhöhen.

                    bei jedem dritten Bild muss das padding-right entfertn werden, dazu nutze ich JS, das sieht so aus:
                    oder könnte ich das auch mit PHP bzw. mit CSS machen?

                    Per CSS. Lies dir mal was zu nth-child durch, damit klappt das :)

                    --
                    42
                    1. Per CSS. Lies dir mal was zu nth-child durch, damit klappt das :)

                      Ah, danke dir, hab es so umgesetzt

                        
                      .ref-bild:nth-child(3n) {  
                      	padding-right:0px;  
                      }  
                      
                      
                    2. Hab gerade gehört, dass nth-child im IE erst ab Version 9 geht. Was mache ich für die alten? Sollte ich dafür doch mein JS stehen lassen und sagen, das JS soll nur für die alten Brwoser genutzt werden?

                      1. Mahlzeit,

                        Hab gerade gehört, dass nth-child im IE erst ab Version 9 geht. Was mache ich für die alten? Sollte ich dafür doch mein JS stehen lassen und sagen, das JS soll nur für die alten Brwoser genutzt werden?

                        Wäre eine Möglichkeit. Schadet zumindest nicht, einen Fallback anzubieten ;)

                        --
                        42
                        1. Wäre eine Möglichkeit. Schadet zumindest nicht, einen Fallback anzubieten ;)

                          Hab es jetzt so umgesetzt, damit sage ich doch, alle die den IE8 oder kleiner benutzen, bekommen das JS ausgeliefert, alle anderen nicht, Richtig?

                            
                          <script>  
                          	$(document).ready(function(){  
                          		  
                          		<!--[if lte IE 8]><!-->  
                          		var counter=1;  
                                  $('div.referenzen img').each(function(){  
                                     if(counter % 3==0){  
                                       $(this).css('padding-right','0');  
                                     }  
                                      counter++;  
                                  });  
                          		<!--<![endif]-->  
                          });  
                          </script>  
                          
                          
                          1. @@Chris1996:

                            nuqneH

                            Wäre eine Möglichkeit. Schadet zumindest nicht, einen Fallback anzubieten ;)

                            Nicht nötig.

                            Hab es jetzt so umgesetzt, damit sage ich doch, alle die den IE8 oder kleiner benutzen, bekommen das JS ausgeliefert, alle anderen nicht, Richtig?

                            Nein, falsch. HTML-Kommentare in JavaScript – das wird wohl nichts.

                            Entweder die conditional comments um das script-Element herum oder innerhalb des JavaScripts conditional compilation.

                            Qapla'

                            --
                            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                      2. @@Chris1996:

                        nuqneH

                        Hab gerade gehört, dass nth-child im IE erst ab Version 9 geht. Was mache ich für die alten?

                        Die ganz alten sind nicht das Problem. Nur IE 8, der CSS3 noch nicht kann, aber CSS-Expressions nicht mehr.

                        Sollte ich dafür doch mein JS stehen lassen und sagen

                        Nein.

                        Qapla'

                        --
                        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                  2. hi,

                    Hallo,

                    Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?

                    Hab es jetzt etwas umgebaut und das das $i entfernt

                    <?php

                      $bv = "klein";  
                      $verzeichnis = opendir($bv);  
                      $bilder = array();  
                      $i = 0;  
                      while (($datei = readdir ($verzeichnis)) !==false) {  
                        
                      	if (preg_match("/\.jpe?g$/",$datei)) {  
                      	  
                      		$bilder[] = $datei;  
                      	  }  
                      }  
                        
                      closedir($verzeichnis);  
                        
                      foreach($bilder as $bild) {  
                      if(++$i > 6) break;  
                      echo "<img src='$bild' class='ref-bild' width='188' height='146' alt='Bild'>";  
                        
                      }  
                    

                    ?>

                    
                    >   
                    > bei jedem dritten Bild muss das padding-right entfertn werden, dazu nutze ich JS, das sieht so aus:  
                    >   
                    > ~~~javascript
                      
                    
                    > $(document).ready(function(){  
                    >       var counter=1;  
                    >         $('div.referenzen img').each(function(){  
                    >            if(counter % 3==0){  
                    >              $(this).css('padding-right','0');  
                    >            }  
                    >             counter++;  
                    >         });  
                    > });  
                    > 
                    
                    

                    oder könnte ich das auch mit PHP bzw. mit CSS machen?

                    https://forum.selfhtml.org/?t=217322&m=1492420

                    Nimm glob() statt while zum Lesen. Den Rest kannst Du dann mit PHP machen. Vergiss nicht $i++ irgendwo im foreach.

                    Und klar kannst Du alles mit PHP machen.

                    mfg

                    tami

                  3. @@Chris1996:

                    nuqneH

                    bei jedem dritten Bild muss das padding-right entfertn werden

                    Warum? Dem Containerelement entsprechenden negativen Margin zu verpassen sollte auch gehen.

                    Qapla'

                    --
                    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Hallo,

    	$i = 0;  
    
      while (($datei = readdir ($verzeichnis)) !==false  && $i <= 4) {  
        
      	if (preg_match("/\.jpe?g$/",$datei)) {  
      	  
      		$bilder[] = $datei;  
      	  }  
      }
    
      
    was für einen Sinn hat es deiner Ansicht nach, $i<4 in der Abbruchbedingung abzufragen, obwohl du es eine Zeile drüber auf 0 gesetzt hast und $i in der Schleife nicht verändert wird?  
      
    
    > ~~~php
    
    		foreach($bilder as $bild) {  
    
    > 		$i++;  
    > 			echo "<img src='klein/$bild' class='ref-bild' width='188' height='146' alt='Bild'>\n";  
    > 		  
    > 		if (($i%2)==0) {  
    > 			echo "<br>";  
    > }}
    
    

    Hier dagegen zählst du $i in der Schleife hoch, beachtest es aber nicht (bzw. nur, um nach jedem zweiten Eintrag einen Zeilenumbruch zu erzeugen). Also stimmt doch offensichtlich was mit deiner Logik nicht.

    Er beachtet mein Limit in der foreach  nicht.

    Wer ist "er"? Und welches Limit? Ich sehe keins.

    Ciao,
     Martin

    --
    Wer schläft, sündigt nicht.
    Wer vorher sündigt, schläft besser.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  3. hi,

      
    <?php  
    $i = 0;  
    ?>  
    <?php foreach (glob("verzeichnis/*.jp*") as $jpg):?>  
    <img src="verzeichnis/<?php echo $jpg;?>" class="ref-bild"width="188" height="146" alt="Bild">  
    <?php if ($i%2 == 0):?>  
    <br>  
    <?php endif;?>  
    <?php  
    	$i++;  
    	if($i > 4) {  
    		break;  
    };  
    ?>  
    <?php endforeach;?>  
    
    

    mfg

    tami