{for}
{for}{forelse}
用于创建一个简单的循环。 下面的几种方式都是支持的:
-
{for $var=$start to $end}
步长1的简单循环。 -
{for $var=$start to $end step $step}
指定步长的循环。
{forelse}
在循环不能遍历的时候执行。(类似python中的else)
属性:
参数名称 | 缩写 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|---|
max | n/a | integer | No | n/a | 循环的次数 |
可选标记:
名称 | 说明 |
---|---|
nocache | 关闭{for} 循环的缓存 |
Example 7.27. 简单的{for}
循环
<ul>
{for $foo=1 to 3}
<li>{$foo}</li>
{/for}
</ul>
输出:
<ul> <li>1</li> <li>2</li> <li>3</li> </ul>
Example 7.28. 使用max
属性
$smarty->assign('to',10);
<ul> {for $foo=3 to $to max=3} <li>{$foo}</li> {/for} </ul>
输出:
<ul> <li>3</li> <li>4</li> <li>5</li> </ul>
Example 7.29. {forelse}
的执行
$smarty->assign('start',10); $smarty->assign('to',5);
<ul> {for $foo=$start to $to} <li>{$foo}</li> {forelse} no iteration {/for} </ul>
输出:
no iteration
参见{foreach}
, {section}
和 {while}
上面参考:http://www.smarty.net/docs/zh_CN/language.function.for.tpl
foreach:
{foreach},{foreachelse}
{foreach}
用于循环数组。 {foreach}
的语法比{section}
循环要更简单和清晰,并且可以使用非数字下标的数组。
{foreach $arrayvar as $itemvar}
{foreach $arrayvar as $keyvar=>$itemvar}
Note
foreach的语法可以接受没有名称的属性,该语法是Smarty 3新增的。然而Smarty 2语法 {foreach from=$myarray key="mykey" item="myitem"}
也同样支持。($smarty2的foreach语法一点也不友好,第一次看的时候总觉得很别扭)。
-
{foreach}
循环可以被嵌套使用. -
array
变量,一般是数组的值,决定了{foreach}
循环的次数。你也可以传递一个任意的整数来控制循环次数。 -
如果
array
数组变量中,没有值的情况下,{foreachelse}
将执行。 -
{foreach}
的属性:@index
,@iteration
,@first
,@last
,@show
,@total
. -
{foreach}
的语法命令:{break}
,{continue}
. -
代替指定
key
变量,你可以通过{$item@key}
来使用循环的当前key。(见下面的例子).
Note
$var@property
的语法是Smarty 3新增的。然而Smarty 2风格的语法{foreach from=$myarray key="mykey" item="myitem"}
,$smarty.foreach.name.property
也是支持的。
Note
即使你在循环语法里{foreach $myArray as $myKey => $myValue}
已经指定了key的变量名,但循环体内$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>
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>
感觉用@熟悉不好看,用下面的好看些:
{foreach $myColors as $key=>$value}
<li>{$key}==>{$value}</li>
{/foreach}
。
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}
上面两个例子输出结果一样。
Example 7.33. {foreachelse}的数据库例子
循环显示数据库(PDO)结果。例子是循环了一个PHP的迭代器(iterator)而不是一个数组(array)。
更多:
http://www.smarty.net/docs/zh_CN/language.function.foreach.tpl