PHP Smarty テンプレート エンジンでのデータ ループには、foreach ループとセクション ループという 2 つの方法があります。以下では、これら 2 つのループ方法を 1 つずつ紹介します。
(1) スマート foreach ループ
foreach は、数値インデックス配列のような連想配列を反復処理するために使用されます。数値インデックス配列のみにアクセスできるセクションとは異なり、foreach の構文はセクションの構文よりもはるかに単純ですが、妥協点として、次の目的でのみ使用できます。単一の配列。各 foreach タグは終了タグ/foreach と組み合わせる必要があります。
foreach ループには、from、item、name、key の 4 つの属性があり、そのうちの from と item は必須です。
Foreach ループは入れ子にすることができ、入れ子になった foreach ループの名前は互いに異なる必要があります。
{foreachelse} フラグメントは、from 属性に値がない場合に実行されます。
foreach ループには、独自のプロパティを持つ変数もあり、{$smarty.foreach.name.property} を通じてアクセスできます。ここで、「name」は name プロパティです。例:
$smarty.foreach.name.index ゼロから始まる現在の配列インデックス。
$smarty.foreach.name.iteration 現在のループ数は、インデックスとは異なり、1 から始まり、ループするたびに 1 ずつ増加します。
$smarty.foreach.name.first は、現在の {foreach} ループが初期位置にある場合に TRUE になります。
$smarty.foreach.name.last は、現在の {foreach} ループが最終位置にある場合に TRUE になります。
$smarty.foreach.name.show show は、{foreach} のパラメータです。ブール値です。値が FALSE の場合、{foreach} は表示されません。対応する {foreachelse} があればそれが表示されます。
$smarty.foreach.name.total 合計には、{foreach} がループする回数が含まれており、{foreach} 内またはその後で使用できます。
注: name 属性は、{section} とは異なり、{foreach} 属性にアクセスする場合にのみ有効です。未定義の名前の {foreach} 属性にアクセスしてもエラーはスローされませんが、予測できない結果が発生します。
例:
{foreach from=$newsList item=news key=newsId name=news}
php Smarty foreach ループの例
(2)スマートセクションループ
{セクション名="sn" ループ="$BusinesList4"}
インデックスと連想配列の両方が非常に便利に使用できることがわかります。以下では、このセクションの各属性の説明を紹介します:
1. スマートセクションの属性
name: (必須) は、ループの一意の名前を示すだけであり、前に $ 記号はありません。
loop: (必須) は、ループする配列を示すために使用されます (つまり、ループされる配列名)。start: (オプション) ループ実行の開始位置。値が負の場合、開始位置は配列の末尾から計算されます。たとえば、配列に 7 つの要素がある場合、start を -2 として指定します。現在の配列のインデックスへのポイントは 5 です。不正な値 (ループ配列の下限を超える) は、最も近い正当な値に自動的に調整されます。
step: (オプション) 他の言語のループと同様、ステップ サイズです。負の数の場合は、逆の順序でループします。
max: (オプション) ループの最大添字。1 の場合は 1 回のみループし、2 の場合は 2 回ループします。show: (オプション) デフォルトは true で、表示されます。 {sectionelse} が設定されている場合。配列に内容がない場合はこの部分の内容が表示され、show が false の場合はこの部分が表示されることを示します。 {sectionelse} が設定されていない場合、配列は出力されません。
2.smarty のセクションの変数
index: 現在のループのインデックスを表示するために使用され、0 から始まり (start 属性が指定されている場合はこの値から開始されます)、毎回 1 ずつ増加します (step 属性が指定されている場合は決定されます) step が指定されていない場合、この値は start 属性と同様に、0 から始まることを除いて、繰り返しと同様の機能を持ちます。
index_prev: 前のループ インデックス値を表示するために使用されます。ループが開始されると、この値は -1 になります。
index_next: ループが最後に実行されるとき、この値はまだ現在のインデックス値より 1 大きい値を表示するために使用されます (step が指定されている場合は、この値に依存します)。iteration: start、step、max 属性の影響を受けるインデックス属性とは異なり、値は常に 1 から始まります (インデックスは 0 から始まります)。 2 つは同等です。
first: 現在のループが初めて実行される場合、first は true に設定されます。
last: 現在のループが最後に実行される場合、last は true に設定されます。
rownum: ループの数を表示するために使用されます。この属性は反復のエイリアスであり、2 つは同等です。
loop: 最後のループのインデックス値を表示するために使用されます。この値はループ内またはループ終了後に使用できます。
show: は、section のパラメータです。show の値は、true または false のブール値です。sectionelse 句が指定されている場合、ループは表示されません。 .total: ループ実行の合計数を表示するために使用されます。この属性はループ中または実行後に呼び出すことができます。
簡単な例:
{セクション名=ループループ=6}
ID: {$smarty.section.loop.index+1}
{/セクション}
スマートセクションのネストされたループの例:
{セクション名=”sn” ループ=”$dis_cType”}
{$BusinesList=${$dis_cType[sn].2}}
{セクション名=sn2ループ=$BusinesList}