如何在Smarty中检查迭代?

回答 3 浏览 2.6万 2012-03-05

我怎样才能检查foreach的当前迭代,并做一些事情?

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

这总是返回未检查的

skywind 提问于2012-03-05
{foreach $from as $item} {if $item@iteration == 5}有点短......rodneyrehm 2012-03-05
3 个回答
#1楼 已采纳
得票数 11

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

apfelbox 提问于2012-03-05
为什么是双等号?只是想了解一下,因为===也能正常工作。loxyboi 2015-08-13
@loxyboi 你可以使用两个或三个等号(三个等号也会检查,类型是否匹配--见php.net/manual/de/language.types.type-juggling.php)。但是在原来的问题中,只有一个等号,这是错误的。apfelbox 2015-08-13
@apfelbox oh yeah I can see that now, didn't spot the one '=' in the question.我以为你指的是Smarty的具体规则。谢谢!loxyboi 2015-08-13
#2楼
得票数 6

有一种替代的(我认为是较新的)技术可以做到这一点。来自Smarty docs的例子很好地展示了它:

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

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

Highly Irregular 提问于2014-09-23
#3楼
得票数 4

对于Smarty 3,你可以使用@iteration属性。

{foreach $new_products as $product}
    {if $product@iteration == 5}
        Do it!
    {/if}
{/foreach}
Marcio Mazzucato 提问于2017-08-16
标签