2011-12-16 86 views
15

我的PHP代码块,看起来像这样:添加不同类偶数和奇数的div

$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级。

我如何在我的情况下做到这一点?我完全无能为力,我不知道该如何开始!

回答

42

在循环之前初始化一个变量$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") . '">'; 
11
[...] 
$i++; 
echo '<div class="'.($i%2 ? 'odd':'even').'>'; 
[...] 
1

如果您使用的是最新的浏览器,你可以使用CSS在你的样式表是这样的。

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

+1对我的教育有关的新功能。 :) – 2011-12-16 21:13:09

+0

正如我的答案中发布的,请注意,此CSS3选择器的浏览器兼容性有限。 – Wex 2011-12-16 21:17:03

5

在foreach之前,声明一个布尔值:

$div_flag = false; 
在foreach

,在那里你呼应DIV补充一点:

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

在的foreach结束(或任何地方其中)加上:

$div_flag = !$div_flag; 
0

试试像这样

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

为你的循环添加一个变量。

$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; 
} 
4

如果你在一个原型现场工作,你总是可以实现纯CSS解决方案:

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

我建议你只用这个原型网站的原因是因为对于兼容性:nth-childdoes not support IE8 or below

0

没有计数器:

<?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;?>