PHP: Как вы определяете каждую N-ю итерацию цикла?

Я хотел повторить изображение каждый после 3-х сообщений через XML, вот мой код:

<?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. } ?> 

вот пример первых 3 правильный, но теперь он не зацикливается idgc.ca/web-design-samples-testing.php

Самый простой способ – использовать оператор деления модуля.

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

Как это работает: подразделение по модулю возвращает остаток. Остальное всегда равно 0, когда вы находитесь на четном краю.

Существует один улов: 0 % 3 равно 0. Это может привести к неожиданным результатам, если ваш счетчик начинается с 0.

Отправляясь от ответа @ Powerlord,

«Существует один улов: 0% 3 равно 0. Это может привести к неожиданным результатам, если ваш счетчик начинается с 0."

Вы все равно можете запустить свой счетчик на 0 (массивы, запросы), но смещать его

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

Используйте modulo арифметическую операцию, найденную здесь, в руководстве по PHP.

например

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

Для более детального понимания расчетов по модулю щелкните здесь .

каждые 3 сообщения?

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

Как насчет: if (($ counter% $ display) == 0)

Я использую это обновление статуса, чтобы показать символ «+» каждые 1000 итераций, и, похоже, он работает хорошо.

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

Вы также можете сделать это без модуля. Просто сбрасывайте счетчик, когда он совпадает.

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