smarty中foreach的用法

{foreach},{foreachelse} php

{foreach} 用於像循環訪問一個數字索引數組同樣循環訪問一個關聯數組,與僅能訪問數字索引數組的{section}不一樣,{foreach}的語法比 {section}的語法簡單得多,可是做爲一個折衷方案也僅能用於單個數組。每一個{foreach}標記必須與關閉標記{/foreach}成對出現。 sql

屬性 數據庫

一、from    類型:array數組 必要性:Yes必要默認值:n/a    描述:循環訪問的數組 數組

二、item     類型:string字符串     必要性:Yes必要     默認值:n/a     描述:當前元素的變量名 this

三、key      類型:string字符串     必要性:No可選     默認值:n/a     描述:當前鍵名的變量名 url

四、name   類型:string字符串     必要性:No可選     默認值:n/a     描述:用於訪問foreach屬性的foreach循環的名稱 索引

from和item是必要屬性
{foreach}循環的name能夠是任何字母,數組,下劃線的組合,參考PHP變量。
{foreach}循環能夠嵌套,嵌套的{foreach}的名稱應當互不相同。
from屬性一般是值數組,被用於判斷{foreach}的循環次數。
在from變量中沒有值時,將執行{foreachelse}。
{foreach}循環也有自身屬性的變量,能夠經過{$smarty.foreach.name.property}訪問,其中"name"是name屬性。
注意:name屬性僅在須要訪問{foreach}屬性時有效,與{section}不一樣。訪問未定義name的{foreach}屬性不會拋出一個錯誤,但將致使不可預知的結果。
{foreach}屬性有index, iteration, first, last, show, total. ci

示例: 字符串

例一. item屬性
<?php
$arr = array(1000, 1001, 1002);
$smarty->assign('myArray', $arr);
?> get

用模板以無序列表輸出$myArray

<ul>
     {foreach from=$myArray item=foo}
    <li>{$foo}</li>
    {/foreach}
</ul>

上例將輸出:

<ul>
    <li>1000</li>
    <li>1001</li>
    <li>1002</li>
</ul>

例二. 演示item和key屬性

<?php
$arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
$smarty->assign('myArray', $arr);
?>

用模板按鍵名/鍵值對的形式輸出$myArray, 相似於PHP的foreach。

<ul>
    {foreach from=$myArray key=k item=v}
   <li>{$k}: {$v}</li>
    {/foreach}
</ul>

上例將輸出:

<ul>
    <li>9: Tennis</li>
    <li>3: Swimming</li>
    <li>8: Coding</li>
</ul>

例三. {foreach}的item屬性是關聯數組

<?php
$items_list = array(23 => array('no' => 2456, 'label' => 'Salad'),
                    96 => array('no' => 4889, 'label' => 'Cream')
                     );
$smarty->assign('items', $items_list);
?>

模板中,url經過$myId輸出$items

<ul>
    {foreach from=$items key=myId item=i}
   <li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>
    {/foreach}
</ul>

上例將輸出:

<ul>
   <li><a href="item.php?id=23">2456: Salad</li>
   <li><a href="item.php?id=96">4889: Cream</li>
</ul>

例四. {foreach}使用嵌套的item和key

向Smarty設置一個數組,對於每一個鍵名對應的每一個循環值都包括鍵。

<?php
$smarty->assign('contacts', array(
                              array('phone' => '1',
                                   'fax' => '2',
                                   'cell' => '3'),
                              array('phone' => '555-4444',
                                   'fax' => '555-3333',
                                   'cell' => '760-1234')
                              ));
?>

用於輸出$contact的模板。

{foreach name=outer item=contact from=$contacts}
<hr />
{foreach key=key item=item from=$contact}
    {$key}: {$item}<br />
{/foreach}
{/foreach}

上例將輸出:

<hr />
phone: 1<br />
fax: 2<br />
cell: 3<br />
<hr />
phone: 555-4444<br />
fax: 555-3333<br />
cell: 760-1234<br />

例五. 使用{foreachelse}的數據庫示例

一個數據庫(例如PEAR或ADODB)的搜索腳本示例,

<?php
   $search_condition = "where name like '$foo%' ";
$sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name';
$smarty->assign('results', $db->getAssoc($sql) );
?>

藉助{foreachelse}標記在沒有結果時模板輸出"None found"字樣。

{foreach key=cid item=con from=$results}
    <a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{foreachelse}
    No items were found in the search
{/foreach}

.index包含當前數組索引,從零開始。

例六. index示例

{* 每五行輸出一次頭部區塊 *}
<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包含當前循環次數,與index不一樣,從1開始,每次循環增加1。

例七. 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}  

first在當前{foreach}循環處於初始位置時值爲TRUE。

例八. first屬性示例

{* 對於第一個條目顯示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>  

last在當前{foreach}循環處於最終位置是值爲TRUE。

例九. last屬性示例

{* 在列表結束時增長一個水平標記 *})
{foreach from=$items key=part_id item=prod name=products}
   <a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}
{foreachelse}
   ... content ...
{/foreach}  

show是{foreach}的參數. show是一個布爾值。若是值爲FALSE,{foreach}將不被顯示。若是有對應的{foreachelse},將被顯示。

total包括{foreach}將循環的次數,既能夠在{foreach}中使用,也能夠在以後使用。

例十. total屬性示例

{* 在結束位置顯示行數 *}
{foreach from=$items key=part_id item=prod name=foo}
{$prod.name><hr/>
{if $smarty.foreach.foo.last}
   <div id="total">{$smarty.foreach.foo.total} items</div>
{/if}
{foreachelse}
... something else ...
{/foreach}

問題

{foreach from=$custid item=curr_id key=num}    {if num is odd}           幹啥    {else}          幹其餘的    {/if} {/foreach} 與如下的代碼的區別,odd和enen的意義? {foreach from=$custid item=curr_id key=num}    {if num%2==0}           幹啥    {else}          幹其餘的    {/if} {/foreach}

相關文章
相關標籤/搜索