PHP: Wie bestimmen Sie jede N-te Iteration einer Schleife?

Lesezeit: 2 Minuten

PHP Wie bestimmen Sie jede N te Iteration einer Schleife
kwek-kwek

Ich wollte nach jedem 3. Post per XML ein Bild wiedergeben, hier ist mein Code:

<?php
// URL of the XML feed.
$feed = 'test.xml';
// How many items do we want to display?
//$display = 3;
// Check our XML file exists
if(!file_exists($feed)) {
  die('The XML file could not be found!');
}
// First, open the XML file.
$xml = simplexml_load_file($feed);
// Set the counter for counting how many items we've displayed.
$counter = 0;
// Start the loop to display each item.
foreach($xml->post as $post) {
  echo ' 
  <div style="float:left; width: 180px; margin-top:20px; margin-bottom:10px;">
 image file</a> <div class="design-sample-txt">'. $post->author.'</div></div>
';

  // Increase the counter by one.
  $counter++;
  // Check to display all the items we want to.
  if($counter >= 3) {
    echo 'image file';
    }
  //if($counter == $display) {
    // Yes. End the loop.
   // break;
  //}
  // No. Continue.
}
?>

Hier ist ein Beispiel, die ersten 3 sind korrekt, aber jetzt wird idgc.ca/web-design-samples-testing.php nicht wiederholt

  • Schlagen Sie vor, die Frage in etwas Aussagekräftigeres zu ändern, z. B. “Bild bei jeder N-ten Schleife anzeigen”.

    – Gregor B

    1. Juni 2009 um 19:17 Uhr

Der einfachste Weg ist die Verwendung des Modulodivisionsoperators.

if ($counter % 3 == 0) {
   echo 'image file';
}

Wie das funktioniert: Die Moduldivision gibt den Rest zurück. Der Rest ist immer gleich 0, wenn Sie bei einem geraden Vielfachen sind.

Es gibt einen Haken: 0 % 3 gleich 0 ist. Dies könnte zu unerwarteten Ergebnissen führen, wenn Ihr Zähler bei 0 beginnt.

  • Modulus ist ein geeigneter Weg, dies zu tun, aber wenn Sie Millionen von Iterationen durchführen, kann dies zu einem Leistungsengpass werden, da Modulus eine Division beinhaltet. Verwenden Sie in diesem Fall besser einen 2. Zähler, vergleichen Sie ihn mit der gewünschten Zahl und setzen Sie ihn zurück, wenn er beim Vergleich übereinstimmt.

    – bhelm

    26. Mai 2016 um 8:12 Uhr

Ausgehend von der Antwort von @Powerlord,

“Es gibt einen Haken: 0 % 3 ist gleich 0. Dies könnte zu unerwarteten Ergebnissen führen, wenn Ihr Zähler bei 0 beginnt.”

Sie können Ihren Zähler immer noch bei 0 beginnen (Arrays, Abfragen), aber ihn versetzen

if (($counter + 1) % 3 == 0) {
  echo 'image file';
}

PHP Wie bestimmen Sie jede N te Iteration einer Schleife
Gregor B

Verwenden Sie die gefundene arithmetische Modulo-Operation Hier im PHP-Handbuch.

z.B

$x = 3;

for($i=0; $i<10; $i++)
{
    if($i % $x == 0)
    {
        // display image
    }
}

Klicken Sie für ein detaillierteres Verständnis der Modulberechnungen Hier.

alle 3 Beiträge?

if($counter % 3 == 0){
    echo IMAGE;
}

Sie können es auch ohne Modul machen. Setzen Sie einfach Ihren Zähler zurück, wenn er übereinstimmt.

if($counter == 2) { // matches every 3 iterations
   echo 'image-file';
   $counter = 0; 
}

1646206926 266 PHP Wie bestimmen Sie jede N te Iteration einer Schleife
Ivar

Wie wäre es mit: if(($counter % $display) == 0)

1646206927 637 PHP Wie bestimmen Sie jede N te Iteration einer Schleife
meme

Ich verwende diese Statusaktualisierung, um alle 1000 Iterationen ein “+”-Zeichen anzuzeigen, und es scheint gut zu funktionieren.

if ($ucounter % 1000 == 0) { echo '+'; }

909840cookie-checkPHP: Wie bestimmen Sie jede N-te Iteration einer Schleife?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy