Как вывести значение для каждого третьего результата инструкции foreach в php?

У меня есть приложение foreach в моем приложении, которое отображает список результатов моей базы данных:

 <?php foreach($featured_projects as $fp) { echo '<div class="result">'; echo $fp['project_name']; echo '</div>'; } ?> 

Я бы хотел:

На каждом третьем результате дайте div другому классу. Как я могу это достичь?

Вы можете использовать счетчик и оператор modulo / module, как показано ниже:

 <?php // control variable $counter = 0; foreach($featured_projects as $fp) { // reset the variable $class = ''; // on every third result, set the variable value if(++$counter % 3 === 0) { $class = ' third'; } // your code with the variable that holds the desirable CSS class name echo '<div class="result' . $class . '">'; echo $fp['project_name']; echo '</div>'; } ?> 
 <?php foreach ($featured_projects as $i => $fp) { echo '<div class="result' . ($i % 3 === 0 ? ' third' : '') . '">'; echo $fp['project_name']; echo '</div>'; } ?> 

Если массив $featured_projects основан на инкрементном индексе, вы можете просто использовать индекс и оператор modulo % .

В противном случае вам придется добавить счетчик.

http://php.net/manual/en/language.operators.arithmetic.php

добавьте счетчик в этот цикл и проверьте, равен ли счетчик три и применит класс.

Использование счетчика и оператора modulo легко реализовать

 <?php foreach($featured_projects as $fp) { if(++$i % 3 === 0) { $class = ' something'; } else { $class = ''; } echo '<div class="result' . $class . '">'; echo $fp['project_name']; echo '</div>'; } ?> 
 <?php $i = 0; foreach($featured_projects as $fp) { echo '<div class="'.($i++%3 ? 'result' : 'other_class').'">'; echo $fp['project_name']; echo '</div>'; } ?> 

Что оставит ваш код в основном в такте

 <?php $i = 1; foreach($featured_projects as $fp) { printf ('<div class="%s">',(($i % 3) ? "result" : "result_every_third" )); echo $fp['project_name']; echo '</div>'; $i++; } ?> 

Но вы можете захотеть использовать конструкцию for или while вокруг «each ($ featured_projects)» (см. http://php.net/manual/en/function.each.php ), что может привести к улучшению кода.

 <?php $counter = 0; foreach ($featured_projects as $fp) { echo '<div class="result' . ($counter++ % 3 === 0 ? ' third' : '') . '">'; echo $fp['project_name']; echo '</div>'; } ?> 

Вы можете добавить счетчик в цикле … попробуйте следующее …

  <?php $i = 0; foreach($featured_projects as $fp) { $i = ++$i; if(($i%3) == 0) { $class1 = 'test1'; } else { $class1 = 'test2'; } echo '<div class="'.$class1.'">'; echo $fp['project_name']; echo '</div>'; } ?> 

Это рабочая версия, извините за мою предыдущую версию:

 <?php $featured_projects[0]['project_name'] = "pippo"; $featured_projects[1]['project_name'] = "pippo2"; $featured_projects[2]['project_name'] = "pippo3"; $class[0] = "class1"; $class[1] = "class2"; $i=0; foreach($featured_projects as $fp) { $i++; if ($i == 3) { $c = $class[1]; $i=0; } else { $c = $class[0]; } echo "<div class=\"$c\">"; echo $fp['project_name']; echo "</div>\n"; } ?> 

Производит:

 <div class="class1">pippo</div> <div class="class1">pippo2</div> <div class="class2">pippo3</div>