天天看點

Smarty中的foreach

Smarty中的foreach,foreachelse [循環處理數組]

相關參數:

    屬性                       類型                    是否必須                      預設值                      描述

       from                     string                    Yes                          n/a           待循環數組的名稱

       item                     string                   Yes                           n/a           目前處理元素的變量名稱

        key                     string                     No                             n/a           目前處理元素的鍵名

        name                    string                    No                           n/a         該循環的名稱,用于通路該循環

foreach 是除 section 之外處理循環的另一種方案(根據不同需要選擇不同的方案)。 foreach 用于處理簡單數組(數組中的元素的類型一緻),它的格式比 section 簡單許多,缺點是隻能處理簡單數組。

foreach 必須和 /foreach 成對使用,且必須指定 from 和 item 屬性。

将 from 屬性指定的數組中的資料周遊處理到 item 屬性指定的變量中。

參考 foreach (array_expression as $key => $value)   

from <=> array_expression;item <=> $value;key <=> $key。

name 屬性可以任意指定(字母、數字和下劃線的組合)。

foreach 可以嵌套,但必須保證嵌套中的 foreach 名稱唯一。

from 屬性(通常是數組)決定循環的次數。

foreachelse 語句在 from 屬性沒有值的時候被執行。(from 屬性所指定的值為空時,可用 foreachelse 語句指定——否則-幹什麼)

foreach   循 環 有 自 己 的 變 量 名 , 使 用 該 變 量 名 可 以 訪 問 該 循 環 .   使 用 方 法 為

{$smarty.foreach.foreachname.varname},其中 foreachname 即在 foreach 中指定的 name 屬性。

foreach 示範

{* 該例将輸出數組 $custid 中的所有元素的值 *}

{foreach from=$custid item=curr_id}

     id: {$curr_id}<br>

{/foreach}

輸出結果:

id: 1000

id: 1001

id: 1002

foreach 鍵的示範和嵌套的示範

{*

數組定義如下:

$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),

array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));

*}

{* 鍵就是數組的下标,請參看關于數組的解釋 *}

{foreach name=outer item=contact from=$contacts}

{foreach key=key item=item from=$contact}

{$key}: {$item}<br>

{/foreach}

{/foreach}

輸出結果:

phone: 1

fax: 2

cell: 3

phone: 555-4444

fax: 555-3333

cell: 760-1234

.index

index 包含目前數組索引,從"0"開始

例如:

<table>

{foreach from=$items key=myId item=i name=foo}

   {if $smarty.foreach.foo.index % 5 == 0}                {* $smarty.foreach.foo.index 對 5 求餘 *}

       <tr><th>Title</th></tr>

   {/if}

<tr><td>{$i.label}</td></tr>

{/foreach}

</table>

.iteration

iteration 包含目前循環的執行次數,總是從 1 開始,每執行一次自加 1。   

例如:

{* 輸出 0|1, 1|2, 2|3, ...     等等 *}

{foreach from=$myArray item=i name=foo}

{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},

{/foreach}

.first

目前 foreach 循環第一次執行時 first 被設定成 true。   

例如:

{* 當循環第一次執行時顯示 LATEST , o 否則顯示 id *}

<table>

{foreach from=$items key=myId item=i name=foo}

<tr>

   <td>{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td>

   <td>{$i.label}</td>

</tr>

{/foreach}

</table>

.last

目前 foreach 循環執行到最後一遍時 last 被設定成 true.   

例如:

{* 在清單最後添加水準線 *}

{foreach from=$items key=part_id item=prod name=products}

   <a href="#{$part_id}" target="_blank" rel="external nofollow" >{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}

{foreachelse}

   ... content ...

{/foreach}

.total

total 用于顯示循環執行的次數,可以在循環中或循環執行後調用.  

例如:

{* 在最後顯示行數 *}

{foreach from=$items key=part_id item=prod name=foo}

{$prod.label}<hr/>

{if $smarty.foreach.foo.last}

   <div id="total">{$smarty.foreach.foo.total} items</div>

{/if}

{foreachelse}

... something else ...

{/foreach}