foreach & Limit
Chris1996
- php
0 tami0 Der Martin0 tami
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?
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
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
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
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.
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.
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
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.
Hallo,
hab es so gemacht:
foreach($bilder as $bild) {
if(++$i > 2) break;
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
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
hi,
Hallo,
Aber wozu hast Du das $i in der while-Schleife, wenn du es da nicht benutzt?
Jo. https://forum.selfhtml.org/?t=217322&m=1492420 ...
mfg
tami
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.
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
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. :)
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.
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
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.
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 :)
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?
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 :)
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;
}
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?
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 ;)
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>
@@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'
@@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
Qapla'
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
@@Chris1996:
nuqneH
bei jedem dritten Bild muss das padding-right entfertn werden
Warum? Dem Containerelement entsprechenden negativen Margin zu verpassen sollte auch gehen.
Qapla'
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
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