这可能
非常简单,但我正在尝试找出一种方法将类添加到无序列表中,然后在每三项之后交替该类。
我只在每三项上添加一个类(这不是我想要的),但这是我的代码:
<?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。任何帮助将不胜感激:)
每次$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++;
}
这是一个演示。尽管您需要检查输出才能看到类更改。
您使用了错误的运算符。
if ($i % 3 == 0)
表示"如果$i的余数除以 3 为 0"。
你想要的是
if (floor($i/3) == 0).
试一试,看看进展如何。
编辑:您似乎也缺少"else"代码。如果你没有这个,它就不会为非"奇数"类写"偶数"。
编辑编辑:如果您希望模式继续,请使用:
if ((floor($i/3) % 2) == 0).
我假设您希望第 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; ?>
另一种方法是使用新的 CSS3 选择器,允许您定位奇数和偶数子项。
下面是一个示例的链接。 基本上,您的列表就像往常一样。
<ul>
<li></li>
<li></li>
</ul>
然后,与其有一个名为 odd 的类,甚至具有不同的样式,不如使用这样的新选择器......
li:nth-child(even) { background: #fff; }
li:nth-child(odd) { background:#000; }
这将使所有偶数列表项的背景为 #fff,所有奇数列表项的背景为 #000。
编辑:您可以使用其他几个 CSS3 选择器,仅使用第一个孩子和第二个孩子来定位前两个之后的偶数和赔率。
您只打印循环的每三次迭代的原因是您使用模运算符"%"
来测试 i 是否可以被三个($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。
尝试在
for 循环中为每个循环嵌套 a。外循环告诉迭代多少次,内循环告诉奇数和偶数多少次。