2013-02-13 46 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 
    )); 
}