<pre name="code" class="php">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 屬性。
{* 該例将輸出數組 $custid 中的所有元素的值 *}
1 {foreach from=$custid item=curr_id}
2 id: {$curr_id}<br>
3 {/foreach}
輸出結果:
id: 1000
id: 1001
id: 1002
foreach 鍵的示範和嵌套的示範
{*
數組定義如下:
1 $smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
2 array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
3 *}
4 {* 鍵就是數組的下标,請參看關于數組的解釋 *}
5
6 {foreach name=outer item=contact from=$contacts}
7 {foreach key=key item=item from=$contact}
8 {$key}: {$item}<br>
9 {/foreach}
10 {/foreach}
11
輸出結果:
phone: 1
fax: 2
cell: 3
phone: 555-4444
fax: 555-3333
cell: 760-1234
.index
index 包含目前數組索引,從"0"開始
例如:
1 <table>
2 {foreach from=$items key=myId item=i name=foo}
3 {if $smarty.foreach.foo.index % 5 == 0} {* $smarty.foreach.foo.index 對 5 求餘 *}
4 <tr><th>Title</th></tr>
5 {/if}
6 <tr><td>{$i.label}</td></tr>
7 {/foreach}
8 </table>
.iteration
iteration 包含目前循環的執行次數,總是從 1 開始,每執行一次自加 1。
例如:
1 {* 輸出 0|1, 1|2, 2|3, ... 等等 *}
2 {foreach from=$myArray item=i name=foo}
3 {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
4 {/foreach}
.first
目前 foreach 循環第一次執行時 first 被設定成 true。
例如:
1 {* 當循環第一次執行時顯示 LATEST , o 否則顯示 id *}
2 <table>
3 {foreach from=$items key=myId item=i name=foo}
4 <tr>
5 <td>{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td>
6 <td>{$i.label}</td>
7 </tr>
8 {/foreach}
9 </table>
.last
目前 foreach 循環執行到最後一遍時 last 被設定成 true.
例如:
1 {* 在清單最後添加水準線 *}
2 {foreach from=$items key=part_id item=prod name=products}
3 <a href="#{$part_id}" target="_blank" rel="external nofollow" >{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}
4 {foreachelse}
5 ... content ...
6 {/foreach}
.total
total 用于顯示循環執行的次數,可以在循環中或循環執行後調用.
例如:
1 {* 在最後顯示行數 *}
2 {foreach from=$items key=part_id item=prod name=foo}
3 {$prod.label}<hr/>
4 {if $smarty.foreach.foo.last}
5 <div id="total">{$smarty.foreach.foo.total} items</div>
6 {/if}
7 {foreachelse}
8 ... something else ...
9
10 {/foreach}
11