这可能是非常简单的,但我想找出一种方法将类添加到无序列表中,然后在每三个项之后替换该类..
我只是在每三个项目上添加一个课程(这不是我想要的),但这是我的代码:
<?php $i=1; foreach($this->items as $item) : ?>
<li class="<?php if ($i % 3 == 0) : ?>odd<?php endif; ?>"><a href="<?php echo $linky; ?>">xxx</a></li>
<?php $i++; endforeach; ?>
哪个吐出来:
<li class="">xxx</li>
<li class="">xxx</li>
<li class="odd">xxx</li>
<li class="">xxx</li>
<li class="">xxx</li>
<li class="odd">xxx</li>
但我希望得到的是:
<li class="odd">xxx</li>
<li class="odd">xxx</li>
<li class="odd">xxx</li>
<li class="even">xxx</li>
<li class="even">xxx</li>
<li class="even">xxx</li>
等等..通常我会用jquery做这样的事情,但我必须在这种情况下使用php ..任何帮助都将非常感激:)
答案 0 :(得分:5)
使用每次$i % 3 == 0
:
// Start with 0 instead of 1
$i=0;
// Flag starts TRUE
$state = TRUE;
foreach ($this->items as $item) {
if ($i % 3 === 0) {
// Flip to opposite state
$state = !$state;
}
?>
<li class="<?php if ($state) : ?>odd<?php else: ?>even<?php endif; ?>"><a href="<?php echo $linky; ?>">xxx</a></li>
<?php
$i++;
}
Here is a demonstration。虽然您需要检查输出以查看类更改。
答案 1 :(得分:2)
你使用了错误的操作符。
if ($i % 3 == 0)
表示“如果$ i除以3的余数为0”。
你想要的是
if (floor($i/3) == 0).
试一试,看看它是怎么回事。
编辑:您似乎也错过了“其他”代码。如果你没有这个,它就不会为非'''类写'偶'。编辑编辑:如果您希望图案继续,请使用:
if ((floor($i/3) % 2) == 0).
答案 2 :(得分:2)
我假设您希望第7项“奇怪”?我写了JavaScript,但应该很容易转换为PHP
for (var i = 0; i < 15; i++) {
if(i%6 < 3) {
document.write("odd<br>");
}
else {
document.write("even<br>")
}
}
将您的代码更改为:
<?php $i=0; foreach($this->items as $item) : ?>
<li class="<?php if ($i % 6 < 3) : ?>odd<?php else: ?>even<?php endif; ?>"><a href="<?php echo $linky; ?>">xxx</a></li>
<?php $i++; endforeach; ?>
答案 3 :(得分:1)
另一种方法是使用新的CSS3选择器,允许您定位奇数和偶数子。
以下是一个示例链接。基本上,你的名单就像平常一样。
<ul>
<li></li>
<li></li>
</ul>
然后你可以使用像这样的新选择器,而不是让一个名为odd的类,甚至使用不同的样式......
li:nth-child(even) { background: #fff; }
li:nth-child(odd) { background:#000; }
这将使所有偶数列表项都具有#fff的背景和所有具有#000背景的奇数列表项。
编辑:您可以使用其他几个CSS3选择器,仅使用第一个孩子和第二个孩子来定位前两个之后的偶数和赔率。
答案 4 :(得分:0)
尝试在for循环中为每个循环嵌套a。外循环告诉迭代多少次,内循环告诉奇数和偶数多少次。
答案 5 :(得分:0)
您只打印循环的每三次迭代的原因是您使用模数运算符"%"
来测试我是否可以被三($i % 3 == 0)
整除。这导致仅当$ i可被3整除时才打印。
解决您的问题:
<?php
$odd = "<li class='odd'>";
$even = "<li class='even'>";
$i = 0;
foreach($this->items as $item)
{
if($i < 3)
echo $odd . $item . "</li>";
else if($i >= 3)
echo $even . $item . "</li>";
$i++;
if($i > 5)
$i = 0;
}
?>
请注意,由于$ i从0开始,前3个项目将被索引为0 - 2,后续3个项目将被编入索引3 - 5.