2012-03-05 68 views
6

如何检查foreach的当前迭代并执行某些操作?如何检查smarty中的迭代?

{foreach $new_products as $product name=foo} 
    {if $smarty.foreach.foo.iteration=5} 
     Do it! 
    {/if} 
{/foreach} 

这总是返回未选中

+2

'{$的foreach从为$项目} {如果$ @项迭代== 5}'是有点短... – rodneyrehm 2012-03-05 08:59:29

回答

9

我认为你应该做{if $smarty.foreach.foo.iteration == 5}(注意==)。

+0

为什么双等号?只是试图理解,因为===也能正常工作。 – loxyboi 2015-08-13 07:53:24

+0

@oxyboi你可以使用两个或三个等号(三个会检查,类型是否匹配 - 请参阅http://php.net/manual/de/language.types.type-juggling.php)。但在原来的问题中,只有一个等号,这是错误的。 – apfelbox 2015-08-13 09:24:46

+0

@apfelbox噢是的,我现在可以看到,没有发现问题中的'='。以为你指的是聪明的特定规则。谢谢! – loxyboi 2015-08-13 11:17:27

6

有一个替代方案(我认为更新)。从Smarty docs的例子演示了好听:

{foreach $items as $i} 
    {if [email protected] eq 3} 
    {* put empty table row *} 
    <tr><td>nbsp;</td></tr> 
    {/if} 
    <tr><td>{$i.label}</td></tr> 
{/foreach} 

注意索引从零开始,所以索引3是第四次迭代。

0

对于Smarty的3,你可以使用@iteration财产

{foreach $new_products as $product} 
    {if [email protected] == 5} 
     Do it! 
    {/if} 
{/foreach}