Добавить другой класс в четные и нечетные divs

У меня есть блок кода PHP, который выглядит так:

$flag = false; if (empty($links)) { echo '<h1>You have no uploaded images</h1><br />'; } foreach ($links as $link) { $extension = substr($link, -3); $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14); ($delete_submit) ? deleteImage('.' . $image_name, $link) : ''; echo '<div>'; echo '<table>'; echo '<tr><td class="fullwidth"><a class="preview_img" href="' . $link . '"><img src="' . $link . '" title="Click to enlarge" width="300" class="thumb" /></a></td></tr>'; echo '<tr><td><span class="default">Direct:</span>&nbsp;'; echo '<input type="text" readonly="readonly" class="link-area" onmouseover="this.select();" value="' . $link . '" />'; echo '</td></tr>'; echo ($flag) ? '<hr /><br>' : ''; echo '</table>'; echo '<br>'; echo '</div>'; $flag = true; } 

Я хочу, чтобы <div> включал другой класс на основе, если он четный или нечетный. Если он четный, он получает класс X, если он нечетный, он получает класс Y.

Как мне это сделать в моем случае? Я совершенно незнакома, и я не знаю, с чего начать!

Инициализировать переменную $count=0; перед циклом. Затем поместите следующее в цикл: ++$count%2?"odd":"even" .

 $count = 0; foreach ($links as $link) { $extension = substr($link, -3); $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14); ($delete_submit) ? deleteImage('.' . $image_name, $link) : ''; echo '<div class="' . (++$count%2 ? "odd" : "even") . '">'; 
 [...] $i++; echo '<div class="'.($i%2 ? 'odd':'even').'>'; [...] 

перед foreach, объявить логическое:

 $div_flag = false; 

в foreach, где вы повторяете div, добавьте следующее:

 "class=".( $div_flag ? "'odd'" : "'even'" ) 

в конце foreach (или где-нибудь в нем, действительно) добавьте это:

 $div_flag = !$div_flag; 

Если вы работаете на сайте прототипа, вы всегда можете реализовать чистое решение CSS:

 div:nth-child(even) { /* Apply even class rules here */ } div:nth-child(odd) { /* Apply odd class rules here */ } 

Причина, по которой я рекомендую использовать это только для сайтов-прототипов, заключается в том, что совместимость для :nth-child не поддерживает IE8 или ниже .

Если вы используете современный браузер, вы можете использовать CSS с чем-то подобным в вашей таблице стилей.

 div:nth-child(odd) { background:#ff0000; } div:nth-child(even) { background:#0000ff; } 

Добавьте переменную для вашего цикла.

 $c = true; foreach ($links as $link) { $extension = substr($link, -3); $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14); ($delete_submit) ? deleteImage('.' . $image_name, $link) : ''; echo '<div'.(($c = !$c)?' class="odd"':'')."> //echo '<div>'; echo '<table>'; echo '<tr><td class="fullwidth"><a class="preview_img" href="' . $link . '"><img src="' . $link . '" title="Click to enlarge" width="300" class="thumb" /></a></td></tr>'; echo '<tr><td><span class="default">Direct:</span>&nbsp;'; echo '<input type="text" readonly="readonly" class="link-area" onmouseover="this.select();" value="' . $link . '" />'; echo '</td></tr>'; echo ($flag) ? '<hr /><br>' : ''; echo '</table>'; echo '<br>'; echo '</div>'; $flag = true; } 

Попробуйте что-то вроде этого

 $count = 0; foreach($links as link) { $count++; print ($count % 2 == 1) ? "odd" : "even"; } 

Без счетчиков:

 <?php $toggle_class = 'even';?> <?php foreach ($links as $link):?> <?php $toggle_class = ($toggle_class == 'odd' ? 'even' : 'odd');?> <div class="<?php echo $toggle_class;?>"> Your div content... </div> <?php endforeach;?>