2010-11-12 88 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} 
相關問題