{foreach},{foreachelse} {foreach} を使用して、通常の数値添字配列と同じように 連想配列 をループします。 {section} のように、数値添字の配列のみ をループさせるということはありません。 {foreach} の構文は {section} よりずっと簡単ですが、その代わりに 1つの配列 しか扱えません。すべての {foreach} タグは、 終了タグ {/foreach} とペアである必要があります。 属性名 必須 デフォルト 概要 from array Yes n/a ループに使用する配列 item string Yes n/a 現在の要素を示す変数の名前 key string No n/a 現在のキーを示す変数の名前 name string No n/a foreach プロパティにアクセスするための foreach ループ名 必須の属性は fromitem です。 {foreach} ループの name は、英数字とアンダースコアを使用して自由に命名できます。これは PHP の変数 と同じです。 {foreach} ループはネスト可能で、ネストした {foreach} の name はお互いにユニークである必要があります。 from 属性は、通常は値の配列で、 {foreach} のループ回数を決定するために使われます。 {foreachelse} は、 from 変数の値が存在しない場合に実行されます。 {foreach} ループは、プロパティを操作する変数を自身で持っています。 これらは次のように表されます。 {$smarty.foreach.name.property} ここで、namename 属性の値となります。 注意 name 属性が必要となるのは {foreach} のプロパティにアクセスする必要がある場合のみです。 これは {section} の場合とは異なります。{foreach} のプロパティに対して 定義されていない name でアクセスしてもエラーは発生しませんが、 結果は予測できない値になります。 {foreach} のプロパティには indexiterationfirstlastshowtotal があります。 <parameter>item</parameter> 属性 assign('myArray', $arr); ?> ]]> $myArray を順序なしリストで出力するテンプレート {foreach from=$myArray item=foo}
  • {$foo}
  • {/foreach} ]]>
    出力
  • 1000
  • 1001
  • 1002
  • ]]>
    <parameter>item</parameter> および <parameter>key</parameter> 属性の説明 'Tennis', 3 => 'Swimming', 8 => 'Coding'); $smarty->assign('myArray', $arr); ?> ]]> $myArray を キー/値 のペアで出力するテンプレート。 PHP の foreach と似ています。 {foreach from=$myArray key=k item=v}
  • {$k}: {$v}
  • {/foreach} ]]>
    出力
  • 9: Tennis
  • 3: Swimming
  • 8: Coding
  • ]]>
    {foreach} で連想配列の <parameter>item</parameter> 属性を指定する例 array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') ); $smarty->assign('items', $items_list); ?> ]]> $items$myId を url に出力するテンプレート {foreach from=$items key=myId item=i}
  • {$i.no}: {$i.label}
  • {/foreach} ]]>
    出力
  • 2456: Salad
  • 4889: Cream
  • ]]>
    {foreach} で <parameter>item</parameter> と <parameter>key</parameter> をネストする例 配列を Smarty に割り当てます。key にはループする値のキーが含まれます。 assign('contacts', array( array('phone' => '1', 'fax' => '2', 'cell' => '3'), array('phone' => '555-4444', 'fax' => '555-3333', 'cell' => '760-1234') )); ?> ]]> $contact を出力するテンプレート {foreach key=key item=item from=$contact} {$key}: {$item}
    {/foreach} {/foreach} ]]>
    出力 phone: 1
    fax: 2
    cell: 3

    phone: 555-4444
    fax: 555-3333
    cell: 760-1234
    ]]>
    データベースを使用する {foreachelse} の例 データベース (PEAR や ADODB など) を検索する例で、クエリの結果を Smarty に割り当てます。 assign('results', $db->getAssoc($sql) ); ?> ]]> 結果がない場合に、{foreachelse} を使用して 見つかりません と表示するテンプレート {$con.name} - {$con.nick}

    {foreachelse} 検索結果が見つかりませんでした {/foreach} ]]> .index index には、現在の配列のインデックスをゼロから数えた値が含まれます。 <parameter>index</parameter> の例 {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} タイトル {/if} {$i.label} {/foreach} ]]> .iteration iteration は現在のループが反復された回数を表示します。 index とは異なり、常に 1 から始まります。 各ループごとに 1 ずつ加算されます。 <parameter>iteration</parameter> および <parameter>index</parameter> の例 .first first は、現在の {foreach} の反復が最初のものであるときに &true; となります。 <parameter>first</parameter> プロパティの例 {foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.first}最新{else}{$myId}{/if} {$i.label} {/foreach} ]]> .last last は、現在の {foreach} の反復が最後のものであるときに &true; となります。 <parameter>last</parameter> プロパティの例 {$prod}{if $smarty.foreach.products.last}
    {else},{/if} {foreachelse} ... コンテンツ ... {/foreach} ]]>
    .show show{foreach} のパラメータとして使用します。 show は boolean 値です。 &false; の場合は {foreach} は表示されず、 もし {foreachelse} が存在すれば、それが代わりに表示されます。 .total total には、 {foreach} がループするトータル回数が含まれます。 これは、{foreach} の内部だけではなく ループを抜けた後でも使用できます。 <parameter>total</parameter> プロパティの例 {if $smarty.foreach.foo.last}
    {$smarty.foreach.foo.total} items
    {/if} {foreachelse} ... 別の内容 ... {/foreach} ]]>
    {section} および $smarty.foreach も参照してください。