我有一个关联数组,我用这个数组生成了很多不同的东西。
我需要的输出格式为
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 :(得分: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}