使用php将类添加到li,然后在每三项之后交替?

使用php将类添加到li,然后在每三项之后交替?,php,css,addclass,Php,Css,Addclass,这可能非常简单,但我正在试图找到一种方法,将一个类添加到无序列表中,然后在每三个项之后替换该类 我只想在每三个项目上添加一个类(这不是我想要的),但下面是我的代码: <?php $i=1; foreach($this->items as $item) : ?> <li class="<?php if ($i % 3 == 0) : ?>odd<?php endif; ?>"><a href="<?php echo $l

这可能非常简单,但我正在试图找到一种方法,将一个类添加到无序列表中,然后在每三个项之后替换该类

我只想在每三个项目上添加一个类(这不是我想要的),但下面是我的代码:

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


你用错了接线员

if ($i % 3 == 0)
表示“如果$i除以3的余数为0”

你想要的是

if (floor($i/3) == 0).
试一下,看看进展如何

编辑:您似乎还缺少“else”代码。如果没有,它就不会为非“奇数”类编写“偶数”

编辑:如果希望图案继续,请使用:

if ((floor($i/3) % 2) == 0).

使用每次
$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++;
}
//从0开始,而不是从1开始
$i=0;
//标志开始为TRUE
$state=TRUE;
foreach($this->items as$item){
如果($i%3==0){
//翻转到相反的状态
$state=!$state;
}
?>

尝试将for-each循环嵌套在for循环中。外部循环告诉您要迭代多少次,内部循环告诉您要放入奇数和偶数的次数。

我假设您希望第7项为“奇数”?我编写了JavaScript,但应该可以轻松地转换为PHP

for(var i=0;​i<15;i++){
如果(i%6<3){
文件。书写(“奇数
”; } 否则{ 文档。写入(“偶数
”) } }​
将代码更改为:

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


循环的每三次迭代只打印一次的原因是,您正在使用模运算符
“%”
测试i是否可被三整除($i%3==0)
。这只会导致在$i可被三整除时打印

要解决您的问题:

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

另一种方法是使用新的CSS3选择器,允许您针对奇数和偶数儿童

这里有一个链接和一个例子。基本上,你的列表和平常一样

<ul>
<li></li>
<li></li>
</ul>
这将使所有偶数列表项的背景为#fff,而所有奇数列表项的背景为#000


编辑:在前两个使用第一个孩子和第二个孩子之后,您可以使用其他几个CSS3选择器只针对偶数和赔率。

您能确认“我希望得到的是”标记吗?这似乎很不寻常,因为类名不再描述内容(即奇数项没有“奇数”类)。对不起,这对我来说很有意义。可以说,我每“行”使用三个li。因此,每套三个li的布局将有所不同:)钯-
(地板($I/3)==0)
对于介于0和2之间的i,计算结果为true,否则为false-这不是作者想要的。感谢您的帮助:)耶,我知道我丢失了else标记,我只是想让3先说奇数lol@SamDufel但这正是作者所说的“我希望得到的”即使类名是“奇数”或“偶数”,她的预期结果也不是交替使用“奇数”和“偶数”。
<?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; ?>
<?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;
}
?>
<ul>
<li></li>
<li></li>
</ul>
li:nth-child(even) { background: #fff; }
li:nth-child(odd) { background:#000; }