2010-11-12 89 views
2

我有一个关联数组,我用这个数组产生了很多不同的东西。循环中的最后一项

我需要输出的形式

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。 有没有人有建议?

回答

0

处理此问题的一般方法是在每个元素之前写入逗号之前的。这样,特殊情况是第一个元素(它不需要前面的逗号)而不是最后一个,并且确定您是否看到第一个元素要容易得多。只需将最初的布尔标志设置为true,然后在匹配条目后将其设置为false

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

+0

也许我做错了什么,但在我分配一个值似乎智者不会改变它{将VAR =“电视”值=“假“}和匹配情况 – 2010-11-12 16:26:21

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数组数据尚未添加逗号。

你也有另一种选择 - 使用预生成内爆此字符串在PHP中:根据需要

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

然后就输出到模板。如果你不止一次需要逗号,这可能是更有效的方法。如果你需要一次,这可能是一种折腾效率的方式。

0

在Smarty的3,这大大简化:

{foreach $aColumns AS $aCol} 
    {$aCol}{if not [email protected]}, {/if} 
{/foreach} 
相关问题