系統整理 Smarty {foreach} 標籤的完整語法,涵蓋四種陣列結構遍歷:一維索引、一維關聯、二維索引、二維關聯。並說明 item/key 參數用法與 Smarty 2/3 語法差異。
<?php
$arr1 = ["北京", "上海", "廣州"]; // 一維索引
$arr2 = ["city1" => "北京", "city2" => "上海"]; // 一維關聯
$arr3 = [["北京", "上海"], ["關羽", "張飛"]]; // 二維索引
$arr4 = [["c1" => "北京", "c2" => "上海"], ["n1" => "關羽", "n2" => "張飛"]]; // 二維關聯
$smarty->assign(['arr1'=>$arr1, 'arr2'=>$arr2, 'arr3'=>$arr3, 'arr4'=>$arr4]);
$smarty->display('temp.tpl');
?>
{* temp.tpl *}
<html>
<h2>Smarty foreach 遍歷範例</h2>
<p style="color:green">1. 一維索引陣列</p>
{foreach from=$arr1 item=val}
{$val}<br />
{/foreach}
<p style="color:orange">2. 一維關聯陣列(取鍵名 key)</p>
{foreach from=$arr2 item=val key=k}
{$k} = {$val}<br />
{/foreach}
<p style="color:red">3. 二維索引陣列(雙層 foreach)</p>
{foreach from=$arr3 item=row}
{foreach from=$row item=val}
{$val}
{/foreach}
<br />
{/foreach}
<p style="color:red">4. 二維關聯陣列(雙層 foreach + key)</p>
{foreach from=$arr4 item=row}
{foreach from=$row item=val key=k}
{$k} = {$val}
{/foreach}
<br />
{/foreach}
<p>單一值直接存取:{$arr2.city1} / {$arr3[0][1]}</p>
</html>
| 特性 | Smarty 2 | Smarty 3 |
|---|---|---|
| 基本語法 | {foreach from=$arr item=v} | 相容,另支援 {foreach $arr as $v} |
| 取鍵名 | key=k | key=k 或 {$v@key} 或 {foreach $arr as $k => $v} |
| 迴圈屬性 | {$v@iteration} 等 | 相同,另支援 {$v@index} (0-based) |
| 屬性 | 說明 |
|---|---|
@index | 0-based 索引 |
@iteration | 1-based 計數 |
@first | 是否第一筆 (bool) |
@last | 是否最後一筆 (bool) |
@total | 總筆數 |
{foreach from=$emptyArr item=v}
{$v}
{foreachelse}
<p>無資料</p>
{/foreach}
{foreach $arr as $k => $v},語法更接近 PHP、可讀性高。熟練掌握 {foreach} 四大陣列結構遍歷,是 Smarty 模板開發的核心基本功。