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

Smarty 區域迴圈 {foreach}{section} 完整語法指南

     編輯:PHP 綜合知識

兩種迴圈語法對照

特性{foreach}{section}
適用資料關聯/數值陣列、物件數值索引陣列為主
鍵值存取直接 key, item透過索引 $arr[idx]
屬性存取$item.prop$arr[idx].prop
迴圈屬性@index, @iteration, @first, @last, @total.index, .iteration, .first, .last, .total
巢狀支援名稱隔離 name="outer"名稱隔離 name="outer"

{foreach} 完整範例

模板

<table border="1">
{foreach key=k item=v from=$array1}
    <tr>
        <td>{$k}</td>
        <td>{$v}</td>
        <td>索引:{$v@index}</td>
        <td>第幾次:{$v@iteration}</td>
        <td>首項:{if $v@first}是{else}否{/if}</td>
        <td>末項:{if $v@last}是{else}否{/if}</td>
    </tr>
{/foreach}
</table>

PHP

<?php
require 'libs/Smarty.class.php';
$smarty = new Smarty();
$array1 = [1 => "Simon", 2 => "Elaine", 3 => "Susan"];
$smarty->assign("array1", $array1);
$smarty->display('test3.htm');
?>

{section} 完整範例

模板

<table border="1">
{section name=sec loop=$array1}
    <tr>
        <td>{$array1[sec]}</td>
        <td>索引:{section name=sec print=.index}</td>
        <td>首項:{if .first}是{else}否{/if}</td>
    </tr>
{/section}
</table>

PHP (索引必須從 0 開始連續)

$array1 = [0 => "Simon", 1 => "Elaine", 2 => "Susan"]; // 關鍵:0 起始連續索引
$smarty->assign("array1", $array1);
$smarty->display('test10.htm');

進階屬性存取

物件/關聯陣列屬性

{foreach $users as $user}
    <div class="user {if $user@first}first{/if} {if $user@last}last{/if}">
        <h3>{$user.name}</h3>
        <span>{$user.email}</span>
        <span>角色:{$user.role}</span>
    </div>
{/foreach}

巢狀迴圈

{foreach $categories as $cat}
    <h2>{$cat.name}</h2>
    <ul>
    {foreach $cat.products as $prod name=prod_loop}
        <li>{$prod.name} - {$prod.price} 
            {if $prod_loop@last}<span class="last">(本類最後)</span>{/if}
        </li>
    {/foreach}
    </ul>
{/foreach}

{foreachelse} 空陣列處理

{foreach $items as $item}
    <li>{$item.name}</li>
{foreachelse}
    <p>目前沒有任何項目</p>
{/foreach}

迴圈控制 (Smarty 3+)

{foreach $items as $item}
    {if $item.skip} {continue} {/if}
    {if $item.stop} {break} {/if}
    <li>{$item.name}</li>
{/foreach}

PHP 端預處理建議

// 確保陣列索引適合 section
$array = array_values($assocArray); // 重設為 0 起始連續索引

// 大量資料分頁只傳當頁
$smarty->assign('items', array_slice($allItems, $offset, $pageSize));
$smarty->assign('pagination', $paginationData);

效能提示

  • {foreach} 比 {section} 更靈活、效能略優
  • 避免在迴圈中呼叫複雜修飾符或函式
  • 大量資料 (1000+) 考慮分頁或 AJAX 載入
  • 編譯快取啟用後模板執行極快,瓶頸通常在 PHP 資料準備

{foreach} 是現代 Smarty 開發的主力迴圈語法,{section} 保留給相容舊模板使用。

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