{foreach}鐢ㄤ簬寰幆鏁扮粍銆
{foreach}鐨勮娉曟瘮{section}寰幆瑕佹洿绠鍗曞拰娓呮櫚锛屽苟涓斿彲浠ヤ娇鐢ㄩ潪鏁板瓧涓嬫爣鐨勬暟缁勩
{foreach $arrayvar as $itemvar}
{foreach $arrayvar as $keyvar=>$itemvar}
Note
foreach鐨勮娉曞彲浠ユ帴鍙楁病鏈夊悕绉扮殑灞炴э紝璇ヨ娉曟槸Smarty 3鏂板鐨勩傜劧鑰孲marty 2璇硶
{foreach from=$myarray key="mykey" item="myitem"}涔熷悓鏍锋敮鎸併
{foreach}寰幆鍙互琚祵濂椾娇鐢.array鍙橀噺锛屼竴鑸槸鏁扮粍鐨勫硷紝鍐冲畾浜{foreach}寰幆鐨勬鏁般備綘涔熷彲浠ヤ紶閫掍竴涓换鎰忕殑鏁存暟鏉ユ帶鍒跺惊鐜鏁般濡傛灉
array鏁扮粍鍙橀噺涓紝娌℃湁鍊肩殑鎯呭喌涓嬶紝{foreachelse}灏嗘墽琛屻{foreach}鐨勫睘鎬э細@index,@iteration,@first,@last,@show,@total.{foreach}鐨勮娉曞懡浠わ細{break},{continue}.浠f浛鎸囧畾
key鍙橀噺锛屼綘鍙互閫氳繃{$item@key}鏉ヤ娇鐢ㄥ惊鐜殑褰撳墠key銆(瑙佷笅闈㈢殑渚嬪瓙).
Note
$var@property鐨勮娉曟槸Smarty 3鏂板鐨勩傜劧鑰孲marty 2椋庢牸鐨勮娉{foreach from=$myarray key="mykey" item="myitem"}, $smarty.foreach.name.property涔熸槸鏀寔鐨勩
Note
鍗充娇浣犲湪寰幆璇硶閲{foreach $myArray as $myKey => $myValue}
宸茬粡鎸囧畾浜唊ey鐨勫彉閲忓悕锛屼絾寰幆浣撳唴$myValue@key杩樻槸鍙敤鐨勩
鍙夋爣璁:
| 鍚嶇О | 璇存槑 |
|---|---|
| nocache | 鍏抽棴{foreach}寰幆鐨勭紦瀛 |
Example聽7.30.聽绠鍗曠殑{foreach} 寰幆
<?php
$arr = array('red', 'green', 'blue');
$smarty->assign('myColors', $arr);
?>
妯℃澘灏嗛『搴忚緭鍑$myColors銆
<ul>
{foreach $myColors as $color}
<li>{$color}</li>
{/foreach}
</ul>
杈撳嚭锛
<ul>
<li>red</li>
<li>green</li>
<li>blue</li>
</ul>
Example聽7.31.聽浣跨敤key鍙橀噺鐨勪緥瀛
<?php
$people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com');
$smarty->assign('myPeople', $people);
?>
妯℃澘灏嗕互閿煎鐨勬柟寮忚緭鍑$myArray
<ul>
{foreach $myPeople as $value}
<li>{$value@key}: {$value}</li>
{/foreach}
</ul>
杈撳嚭锛
<ul>
<li>fname: John</li>
<li>lname: Doe</li>
<li>email: j.doe@example.com</li>
</ul>
Example聽7.32.聽澶氱淮鏁扮粍閫氳繃item 鍜 key鏉ュ祵濂椾娇鐢▄foreach}
澶氱淮鏁扮粍鐨勯敭涓鑸細瀵瑰簲鍙︿竴涓暟缁勩
<?php
$smarty->assign('contacts', array(
array('phone' => '555-555-1234',
'fax' => '555-555-5678',
'cell' => '555-555-0357'),
array('phone' => '800-555-4444',
'fax' => '800-555-3333',
'cell' => '800-555-2222')
));
?>
妯℃澘灏嗚緭鍑$contact.
{* key always available as a property *}
{foreach $contacts as $contact}
{foreach $contact as $value}
{$value@key}: {$value}
{/foreach}
{/foreach}
{* accessing key the PHP syntax alternate *}
{foreach $contacts as $contact}
{foreach $contact as $key => $value}
{$key}: {$value}
{/foreach}
{/foreach}
涓婇潰涓や釜渚嬪瓙閮戒細杈撳嚭锛
phone: 555-555-1234 fax: 555-555-5678 cell: 555-555-0357 phone: 800-555-4444 fax: 800-555-3333 cell: 800-555-2222
Example聽7.33.聽{foreachelse}鐨勬暟鎹簱渚嬪瓙
寰幆鏄剧ず鏁版嵁搴擄紙PDO锛夌粨鏋溿備緥瀛愭槸寰幆浜嗕竴涓狿HP鐨勮凯浠e櫒锛坕terator锛夎屼笉鏄竴涓暟缁勶紙array锛夈
<?php
include('Smarty.class.php');
$smarty = new Smarty;
$dsn = 'mysql:host=localhost;dbname=test';
$login = 'test';
$passwd = 'test';
// setting PDO to use buffered queries in mysql is
// important if you plan on using multiple result cursors
// in the template.
$db = new PDO($dsn, $login, $passwd, array(
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
$res = $db->prepare("select * from users");
$res->execute();
$res->setFetchMode(PDO::FETCH_LAZY);
// assign to smarty
$smarty->assign('res',$res);
$smarty->display('index.tpl');?>
?>
{foreach $res as $r}
{$r.id}
{$r.name}
{foreachelse}
.. no results ..
{/foreach}
涓婇潰鐨勪緥瀛愭樉绀轰簡鏌ヨ缁撴灉id 鍜 name涓や釜瀛楁鐨勫唴瀹广
杩唬鍣ㄥ拰鏁扮粍寰幆鍝釜鏇撮珮鏁堝憿锛熸暟缁勮岃█锛屾瘡娆″惊鐜箣鍓嶅叏閮ㄧ殑鏁扮粍鏁版嵁閮戒細琚厛鏀惧埌鍐呭瓨鍫嗘爤鍐咃紝鐒跺悗鍐嶈繘琛屽惊鐜 鑰岃凯浠e櫒姣忔杩唬寰幆鏃讹紝閮戒細杞藉叆骞堕噴鏀剧粨鏋滃唴瀹癸紝杩欐牱鍙互鑺傜渷杩愯鏃堕棿鍜屽唴瀛橈紝灏ゅ叾鏄綋缁撴灉闆嗛潪甯稿ぇ鐨勬椂鍊欍
index鏄綋鍓嶆暟缁勭储寮曪紝浠0寮濮嬭绠椼
Example聽7.34.聽index 渚嬪瓙
{* output empty row on the 4th iteration (when index is 3) *}
<table>
{foreach $items as $i}
{if $i@index eq 3}
{* put empty table row *}
<tr><td>nbsp;</td></tr>
{/if}
<tr><td>{$i.label}</td></tr>
{/foreach}
</table>
iteration鏄綋鍓嶅惊鐜殑娆℃暟锛屽拰index涓嶅悓锛iteration鏄粠1寮濮嬨
iteration鍦ㄦ瘡娆″惊鐜殑鏃跺欓兘浼氬姞涓銆
Example聽7.35.聽iteration 渚嬪瓙: is div by
"is div by"杩愮畻鍙互瀵瑰惊鐜鏁板仛涓浜涚壒娈婄殑鍒ゆ柇銆 涓嬮潰鎴戜滑灏嗘瘡4娆″惊鐜氨杈撳嚭涓娆$矖浣撶殑鍚嶇О銆
{foreach $myNames as $name}
{if $name@iteration is div by 4}
<b>{$name}</b>
{/if}
{$name}
{/foreach}
Example聽7.36.聽iteration 渚嬪瓙: is even/odd by
"is even by" 鍜 "is odd by"鍙互鐢ㄤ簬鍦ㄥ惊鐜腑濂囧伓浜ゆ浛杩涜涓浜涙搷浣溿傚湪寮濮嬬殑鏃跺欏彲浠ラ夋嫨濂囨垨鍋剁殑寰幆銆 涓嬮潰鏄瘡涓夋寰幆浼氭敼鍙樹竴娆″瓧浣撻鑹层
{foreach $myNames as $name}
{if $name@iteration is even by 3}
<span style="color: #000">{$name}</span>
{else}
<span style="color: #eee">{$name}</span>
{/if}
{/foreach}
杈撳嚭锛
<span style="color: #000">...</span>
<span style="color: #000">...</span>
<span style="color: #000">...</span>
<span style="color: #eee">...</span>
<span style="color: #eee">...</span>
<span style="color: #eee">...</span>
<span style="color: #000">...</span>
<span style="color: #000">...</span>
<span style="color: #000">...</span>
<span style="color: #eee">...</span>
<span style="color: #eee">...</span>
<span style="color: #eee">...</span>
...
褰撳惊鐜{foreach}鏄娆″惊鐜椂锛first灏嗕负TRUE
涓嬮潰鎴戜滑鐢╢irst鏉ユ樉绀轰竴涓〃鏍肩殑琛ㄥご銆
Example聽7.37.聽first渚嬪瓙
{* show table header at first iteration *}
<table>
{foreach $items as $i}
{if $i@first}
<tr>
<th>key</td>
<th>name</td>
</tr>
{/if}
<tr>
<td>{$i@key}</td>
<td>{$i.name}</td>
</tr>
{/foreach}
</table>
褰{foreach}寰幆鍒颁簡鏈鍚庝竴娆℃椂锛
last灏嗕负TRUE銆
涓嬮潰鎴戜滑灏嗗湪寰幆鐨勬渶鍚庢彃鍏ヤ竴鏉℃按骞崇嚎銆
Example聽7.38.聽last渚嬪瓙
{* Add horizontal rule at end of list *}
{foreach $items as $item}
<a href="#{$item.id}">{$item.name}</a>{if $item@last}<hr>{else},{/if}
{foreachelse}
... no items to loop ...
{/foreach}
show灞炴ф槸鍦{foreach}寰幆鎵ц涔嬪悗锛
妫娴嬪惊鐜槸鍚︽樉绀烘暟鎹殑鍒ゆ柇銆
show鏄竴涓竷灏斿笺
Example聽7.39.聽show渚嬪瓙
<ul>
{foreach $myArray as $name}
<li>{$name}</li>
{/foreach}
</ul>
{if $name@show} do something here if the array contained data {/if}
total鏄暣涓{foreach}寰幆鐨勬鏁般
total鍙互鍦{foreach}鍐呴儴锛屾垨鑰呬箣鍚庝娇鐢ㄣ
Example聽7.40.聽total渚嬪瓙
{* show number of rows at end *}
{foreach $items as $item}
{$item.name}<hr/>
{if $item@last}
<div id="total">{$item@total} items</div>
{/if}
{foreachelse}
... no items to loop ...
{/foreach}
