簡體   English   中英

使用PHP將類添加到李,然后每隔第三項后交替?

[英]using php to add classes to li then alternate after every third item?

這可能很簡單,但我正在嘗試找出一種將類添加到無序列表,然后在每三個項目之后替換該類的方法。

我只想在每三個項目上添加一個類(這不是我想要的),但這是我的代碼:

<?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).

試試看,看看如何進行。

編輯:您似乎還缺少“其他”代碼。 如果沒有,則不會為非奇數類編寫“偶數”。

編輯:如果您希望模式繼續,請使用:

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>

然后,您可以像這樣使用新的選擇器,而不是使用一個稱為奇數且具有不同樣式的類,而無需使用此類。

li:nth-child(even) { background: #fff; }
li:nth-child(odd) { background:#000; }

這將使所有偶數列表項的背景為#fff,而所有奇數列表項的背景為#000。

編輯:您可以使用其他兩個CSS3選擇器,僅使用第一個孩子和第二個孩子來定位前兩個對象之后的偶數和幾率。

嘗試將for循環的for循環嵌套在for循環中。 外循環告訴我們要迭代多少次,內循環告訴我們要把奇偶數次。

您只打印循環的每三個迭代一次的原因是,您正在使用模數運算符"%"來測試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-5。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM