PHP: Как вы определяете каждую N-ю итерацию цикла?
Я хотел эхо изображение после трех сообщений через 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
Ответы
Ответ 1
Самый простой способ - использовать оператор деления модуля.
if ($counter % 3 == 0) {
echo 'image file';
}
Как это работает:
Модулильное деление возвращает остаток. Остаток всегда равен 0, когда вы находитесь на четном краю.
Существует один catch: 0 % 3
равен 0. Это может привести к неожиданным результатам, если ваш счетчик начинается с 0.
Ответ 2
Используйте операцию modulo арифметики, найденную здесь в руководстве по PHP.
например.
$x = 3;
for($i=0; $i<10; $i++)
{
if($i % $x == 0)
{
// display image
}
}
Для более детального понимания расчетов по модулю нажмите здесь.
Ответ 3
Отключение ответа @Powerlord,
"Существует один улов: 0% 3 равно 0. Это может привести к неожиданные результаты, если ваш счетчик начинается с 0.
Вы все равно можете запустить свой счетчик на 0 (массивы, запросы), но смещать его
if (($counter + 1) % 3 == 0) {
echo 'image file';
}
Ответ 4
каждые 3 сообщения?
if($counter % 3 == 0){
echo IMAGE;
}
Ответ 5
Как насчет: if (($ counter% $display) == 0)
Ответ 6
Я использую это обновление статуса, чтобы показать символ "+" каждые 1000 итераций, и, похоже, он работает хорошо.
if ($ucounter % 1000 == 0) { echo '+'; }
Ответ 7
Вы также можете сделать это без модуля. Просто reset ваш счетчик, когда он соответствует.
if($counter == 2) { // matches every 3 iterations
echo 'image-file';
$counter = 0;
}