首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Smarty foreach 迴圈完整指南:一維/二維、索引/關聯陣列遍歷

     編輯:PHP 綜合知識

系統整理 Smarty {foreach} 標籤的完整語法,涵蓋四種陣列結構遍歷:一維索引、一維關聯、二維索引、二維關聯。並說明 item/key 參數用法與 Smarty 2/3 語法差異。

PHP 端測試資料

<?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 vs 3 語法差異

特性Smarty 2Smarty 3
基本語法{foreach from=$arr item=v}相容,另支援 {foreach $arr as $v}
取鍵名key=kkey=k 或 {$v@key} 或 {foreach $arr as $k => $v}
迴圈屬性{$v@iteration} 等相同,另支援 {$v@index} (0-based)

foreach 迴圈屬性(@property)

屬性說明
@index0-based 索引
@iteration1-based 計數
@first是否第一筆 (bool)
@last是否最後一筆 (bool)
@total總筆數

進階:foreachelse 空陣列處理

{foreach from=$emptyArr item=v}
    {$v}
{foreachelse}
    <p>無資料</p>
{/foreach}

最佳實務

  • 優先使用 Smarty 3 風格 {foreach $arr as $k => $v},語法更接近 PHP、可讀性高。
  • 大量資料建議在 PHP 端分頁處理,避免模板端記憶體壓力。
  • 巢狀層級超過 3 層時,考慮重構資料結構或移至 PHP 端預處理。

熟練掌握 {foreach} 四大陣列結構遍歷,是 Smarty 模板開發的核心基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved