У меня есть приложение 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 %
.
В противном случае вам придется добавить счетчик.
добавьте счетчик в этот цикл и проверьте, равен ли счетчик три и применит класс.
Использование счетчика и оператора 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>