循环中的最后一个条目

时间:2010-11-12 15:43:53

标签: smarty

我有一个关联数组,我用这个数组生成了很多不同的东西。

我需要的输出格式为

aa, ab, ac, ad, af, ak, az

所以最后一个条目后面没有逗号

{section name=i loop=$aColums}
  {if $aColums[i].contshow eq 'y'}
    {$aColums[i].Name}
  {endif}
{/section}

我的问题是我不知道何时达到最后一个具有contshow=y属性的值。所以我的下一个想法是在写aColums[i].Name之前应用逗号。但是在这里我有一个类似的问题,因为我不知道什么时候我用contshow=y达到了第一个值。 有没有人有建议?

3 个答案:

答案 0 :(得分:3)

有一种替代方法,使用部分的.last属性。

{section name=i loop=$aColums} 
  {if $aColums[i].contshow eq 'y'} 
    {$aColums[i].Name}{if $smarty.section.i.last eq false}, {/if}
  {endif} 
{/section}

在每个输出名称后面添加一个','除非它是{section}的最后一次迭代。我假设您的$ aColums数组数据尚未添加逗号。

您还有另一个选项 - 使用implode在PHP中预生成此字符串:

$aColumsString = implode(', ', $aColums);
$smarty->assign('aColumsString', $aColumsString);

然后根据需要输出到模板。如果您需要多次使用逗号列表,这可能是更有效的方法。如果你需要它一次,它可能是一种提高效率的方法。

答案 1 :(得分:0)

处理此问题的一般方法是在每个元素之前编写逗号。通过这种方式,特殊情况是第一个元素(它不需要前面的逗号)而不是最后一个,并且更容易弄清楚你是否看到了第一个元素或不。最初只需将布尔标志设置为true,然后在匹配条目后将其设置为false

请注意,Smarty可能有一个实用程序函数,用于使用给定字符串(在本例中为逗号)“连接”数组。如果存在这样的功能,直接使用它将是最好的选择。

答案 2 :(得分:0)

在Smarty 3中,这非常简化:

{foreach $aColumns AS $aCol}
    {$aCol}{if not $aCol@last}, {/if}
{/foreach}