Smarty foreachの詳しい説明

WBOY
リリース: 2016-06-20 12:30:45
オリジナル
879 人が閲覧しました

{foreach} は、数値インデックス付き配列をループするための {section} とは異なり、連想配列と数値インデックス付き配列をループするために使用されます。 のみ。{foreach} の構文は {section} よりもはるかに簡単ですが、単一の配列にのみ使用できます。すべての {foreach} タグを終了タグと組み合わせる必要があります。 {/foreach} タグ。

{foreach} は、数値インデックス配列にのみアクセスできる {section} とは異なり、{foreach} の構文の方が優れています。 {section} 構文ははるかに単純ですが、トレードオフとして、単一の配列でのみ機能します。各 {foreach} タグは、終了タグ {/foreach} と組み合わせる必要があります。

Attribute Name属性名称 Type类型 Required必要 Default默认值 Description描述
from array数组 Yes必要 n/a The array you are looping through循环访问的数组
item string字符串 Yes必要 n/a The name of the variable that is the current element当前元素的变量名
key string字符串 No可选 n/a The name of the variable that is the current key当前键名的变量名
name string字符 No可选 n/a The name of the foreach loop for accessing foreach properties用于访问foreach属性的foreach循环的名称
  • 必須の属性は from と item です。
  • from と item は必須の属性です
  • {foreach} ループの名前は、任意の文字で構成できます。
  • {foreach} ループの名前には、文字、配列、アンダースコアを任意に組み合わせることができます。PHP 変数を参照してください。
  • {foreach} ループはネストでき、ネストされた {foreach} 名は互いに一意である必要があります。
  • {foreach} ループはネストでき、ネストされた {foreach} 名は互いに一意である必要があります。は互いに異なる必要があります。
  • from 属性 (通常は値の配列) は、{foreach} がループする回数を決定します。
  • {foreachelse} は、from 変数に値がない場合に実行されます。
  • {foreachelse} は、from 変数に値がない場合に実行されます。
  • {foreach} ループには、プロパティを処理する独自の変数もあります。これらは、
  • { という名前属性を持つ {$smarty.foreach.name.property} でアクセスされます。 foreach} ループには、独自のプロパティを持つ変数もあり、{$smarty.foreach.name.property} を通じてアクセスできます。ここで、「name」は name プロパティです。
  • 注: name 属性は、 {section} とは異なり、 {foreach} プロパティにアクセスする場合にのみ必要です。 nameunknown を使用して {foreach} プロパティにアクセスすると、エラーはスローされませんが、代わりに予測できない結果が発生します。

  • 注: name 属性は、{section} とは異なる、{foreach} 属性にアクセスする場合にのみ有効です。未定義の名前の {foreach} 属性にアクセスしてもエラーはスローされませんが、予測できない結果が発生します。

    {foreach} プロパティは、index、iteration、first、last、show、total です。
  • {foreach} プロパティは、index、iteration、first、last、show、 total.
例 7-5. 項目属性

例 7-5. $myArray を un で出力するテンプレート-順序付きリスト

テンプレートを使用して $myArray を順序なしリストに出力します

     assign('myArray', $arr);?>
ログイン後にコピー

上記の例は次のように出力します。

上記の例は次のようになります。出力:

<ul>{foreach from=$myArray item=foo}    <li>{$foo}</li>{/foreach}</ul>
ログイン後にコピー

例 7-6. 項目とキーの属性を示します

例 7-6. 項目とキーの属性を示します

<ul>    <li>1000</li>    <li>1001</li>    <li>1002</li></ul>
ログイン後にコピー

PHP の foreach のような $myArrayas のキーと値のペアを出力するためのテンプレート

テンプレートのキー名を使用 /$myArray をキーと値の形式で出力します。 PHP の foreach に似たペア。

      'Tennis', 3 => 'Swimming', 8 => 'Coding');$smarty->assign('myArray', $arr);?>
ログイン後にコピー

上の例は出力します:

上の例は出力します:

<ul>{foreach from=$myArray key=k item=v}   <li>{$k}: {$v}</li>{/foreach}</ul>
ログイン後にコピー

例 7-7. 関連項目属性

を含む $itemswith $myIdin を URL に出力するテンプレート

テンプレートでは、URL は $items

<ul>    <li>9: Tennis</li>    <li>3: Swimming</li>    <li>8: Coding</li></ul>
ログイン後にコピー

上の例は出力します:

上の例は出力します:

      array('no' => 2456, 'label' => 'Salad'),96 => array('no' => 4889, 'label' => 'Cream'));$smarty->assign('items', $items_list);?>
ログイン後にコピー

例 7- 8. ネストされた項目とキーを含む {foreach}

例 7- 8. {foreach} はネストされた項目とキーを使用します

<ul>{foreach from=$items key=myId item=i}  <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>{/foreach}</ul>
ログイン後にコピー

Smarty に配列を割り当てます。キーにはループされた各値のキーが含まれます.

キーごとに Smarty に配列を割り当てます。名前に対応する各ループ値にはキーが含まれます。

<ul>  <li><a href="item.php?id=23">2456: Salad</li>  <li><a href="item.php?id=96">4889: Cream</li></ul>
ログイン後にコピー

$contact を出力するテンプレート

$contact を出力するテンプレート。

上の例は出力します:

上の例は出力します:

     assign('contacts', array(array('phone' => '1','fax' => '2','cell' => '3'),array('phone' => '555-4444','fax' => '555-3333','cell' => '760-1234')));?>
ログイン後にコピー

例 7-9. {foreachelse}

{foreach name=outer item=contact from=$contacts}  <hr />  {foreach key=key item=item from=$contact}    {$key}: {$item}<br />  {/foreach}{/foreach}
ログイン後にコピー
例 7-9. {foreachelse}

を使用したデータベースの例 (例: PEAR またはADODB) の検索スクリプトの例。Smarty に割り当てられたクエリ結果

{foreachelse} で結果がなかった場合に「何も見つかりませんでした」と表示するテンプレート。

<hr />  phone: 1<br />  fax: 2<br />  cell: 3<br /><hr />  phone: 555-4444<br />  fax: 555-3333<br />  cell: 760-1234<br />
ログイン後にコピー
{foreachelse} タグを使用して出力します。結果がない場合は「何も見つかりませんでした」というメッセージが表示されます。

Index には、0 から始まる現在の配列インデックスが含まれます。

.index には、0 から始まる現在の配列インデックスが含まれます。

例 7-10. インデックスの例

     assign('results', $db->getAssoc($sql) );?>
ログイン後にコピー
例 7-10. インデックスの例

{* The header block is output every five rows *}{* 每五行输出一次头部区块 *}                             <table>                                 {foreach from=$items key=myId item=i name=foo}{if $smarty.foreach.foo.index % 5 == 0}                                                    <tr>          <th>Title</th>         </tr>{/if}                    <tr>          <td>{$i.label}</td>         </tr>{/foreach}                           </table>
ログイン後にコピー

.iteration

iterationcontains the current loop iteration and always starts at one, unlike index . It is incremented by one on each iteration.

iteration包含当前循环次数,与index不同,从1开始,每次循环增长1。

Example 7-11. iteration and index example

例 7-11. iteration和index示例

{* this will output 0|1, 1|2, 2|3, ... etc *}{* 该例将输出0|1, 1|2, 2|3, ... 等等 *}{foreach from=$myArray item=i name=foo}{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},{/foreach}
ログイン後にコピー

firstis TRUEif the current {foreach}iteration is the initial one.

first在当前{foreach}循环处于初始位置时值为TRUE。

Example 7-12. first property example

例 7-12. first属性示例

{* show LATEST on the first item, otherwise the id *}{* 对于第一个条目显示LATEST而不是id *}                             <table>                                 {foreach from=$items key=myId item=i name=foo}                                                    <tr>                   <td>{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}</td>          <td>{$i.label}</td>         </tr>{/foreach}                           </table>
ログイン後にコピー

lastis set to TRUEif the current {foreach}iteration is the final one.

last在当前{foreach}循环处于最终位置是值为TRUE。

Example 7-13. last property example

例 7-13. last属性示例

{* Add horizontal rule at end of list *}{* 在列表结束时增加一个水平标记 *}){foreach from=$items key=part_id item=prod name=products}             {$prod}{if $smarty.foreach.products.last}                              <hr />{else},{/if}{foreachelse}... content ...{/foreach}      
ログイン後にコピー

showis used as a parameter to {foreach}. showis a boolean value. If FALSE, the {foreach}will not be displayed. If there is a {foreachelse}present, that will be alternately displayed.

show是{foreach}的参数. show是一个布尔值。如果值为FALSE,{foreach}将不被显示。如果有对应的{foreachelse},将被显示。

totalcontains the number of iterations that this {foreach}will loop. This can be used inside or after the {foreach}.

total包括{foreach}将循环的次数,既可以在{foreach}中使用,也可以在之后使用。

Example 7-14. total property example

例 7-14. total属性示例

{* show rows returned at end *}{* 在结束位置显示行数 *}{foreach from=$items key=part_id item=prod name=foo}{$prod.name>                         <hr />{if $smarty.foreach.foo.last}           {$smarty.foreach.foo.total} items     
ログイン後にコピー

{/if}{foreachelse}... something else ...{/foreach}

See also {section} and  $smarty.foreach .

参考{section}和$smarty.foreach。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート