2013-02-13 87 views
1

即時通訊使用類似這樣的東西代碼:CakePHP的:如何獲得迭代器

<?php foreach ($items as $item): ?> 
    <div><?php echo $item['Item']['content']; ?></div> 
<?php endforeach; ?> 

,我想知道哪些元素是每一個項目,因爲我想添加類「後進行」對於行中的每一個第四項。如何製作這樣的代碼?

<?php for ($i=1; $i <= $items.count; $i++) { 
    echo "<div "; 
    if ($i % 4 == 0) { 
     echo " class=\"last-in-row\""; } 
    echo ">$items[$i]</div>"; 
}; ?> 

回答

2

我還沒有測試過,但下面應該可以工作。

<?php 
$i = 1; 
foreach ($items as $item) { 
    $class = ($i % 4 == 0) ? '' : 'class="last-in-row"'; 
    echo "<div $class>{$item['Item']['content']}</div>"; 
    $i++; 
} 
?> 

p.s.我希望你是sanitizing $ item ['Item'] ['content']。

+0

div:nth-child(4n+4) { .... clear: both; .... } 

CakePHP的選項不會這標誌着第一行是「後進行」?當然,我需要從1. – drmonkeyninja 2013-02-13 13:59:47

+0

@drmonkeyninja好點...如我所說,我沒有真正測試過它。 – 2013-02-13 14:02:34

+0

你不消毒!你逃避 - 使用'echo h($ value);' – mark 2013-02-13 14:16:48

0

你幾乎有它在你的第二個例子,只是改變$items.count到值count($items)

$itemsCount = count($items); 
for ($i=1; $i <= $itemsCount ; $i++) { 
    echo "<div "; 
    if ($i % 4 == 0) { 
     echo " class=\"last-in-row\""; } 
    echo ">{$items[$i]}</div>"; 
} 
+0

這假定$ items的索引總是增加1.使用帶計數器變量的foreach循環效果更好,因爲它沒有這樣的假設。 – drmonkeyninja 2013-02-13 14:19:16

+0

的確,我剛剛修復了OP的嘗試。 – Dunhamzzz 2013-02-13 14:20:18

2

什麼你正在嘗試做的可以用CSS3來完成。這意味着你不需要添加一個更好的類,以後可能需要連續3或5個。沒有CSS3

foreach ($items as $i => $item) { 
    echo $this->Html->tag('div', $item['Item']['content'], array(
     'class' => ($i + 1) % 4 === 0 ? 'last' : null 
    )); 
}