foreach and foreachelse篇
foreach用于遍历数组,可以是非关联数组,与section相比要简单些,在smarty3中可以接受没有名称的属性,也可以使用smarty2有名称的属性。与{section}*(只能循环连续的索引数组)相比较,{foreach}可以做任何{section}可以做到的因此也推荐使用{foreach}
- 可以嵌套循环
- 当foreach的值为空时,进行foreachelse运行
- 属性:
@index是当前数组索引,从0开始计算。
@iteration 是当前循环的次数,和index不同,他从 1 开始,在每次循环都会加1。
@first 当循环{foreach}
是首次循环时,first
将为TRUE
,
@ last 当{foreach}
循环到了最后一次时,last
将为TRUE
@show
@tottal 是整个{foreach}
循环的次数。 total可以在{foreach}
内部,或者之后使用 - 语法命令:{break}终止循环, {continue}将跳过当前本次循环并进入下一次循环
- 代替指定的 key 变量,可以通过{item@key}来使用当前循环的key
{foreach $arrayvar as $itemvar} {foreach $arrayvar as $keyvar=>$itemvar}
{foreach from=$foreach_else item=first_loops_element name=first_loops_name key=fisrt_loops_key}
{foreach} example
index.php: $foreach_else = array( 'first_layout1' => array('second_layout1'), 'first_layout2' => array('second_layout2'), 'first_layout3' => array('second_layout3') ); $res = array(); foreach.tpl: {foreach $foreach_else as $item} 第一次循环的键值:{$item@key} <br> {foreach $item as $value} 进入第二次循环:{$value@key}=>{$value} <br> {foreachelse} this is the loop end {/foreach} {/foreach}
{foreach $res as $r}
{$r.id}
{$r.name}
{foreachelse}
.. no results ..
{/foreach}
then the result:
第一次循环的键值:first_layout1 进入第二次循环:0=>second_layout1 第一次循环的键值:first_layout2 进入第二次循环:0=>second_layout2 第一次循环的键值:first_layout3 进入第二次循环:0=>second_layout3
如果循环一个迭代器的话,比循环一个数组快。
@index
{foreach $connect_arr as $item}
{if $item@index eq 3}
输出 :{$item} {/if}
{foreachelse}
数组的索引小于 3
{/foreach}
@iteration
index.php:
$num_count = array(1, 2, 3, 4, 5, 6);
tpl.tpl
{foreach $num_count as $name}
{if $name@iteration is div by 4}
<b>{$name@iteration}</b>
{/if}
{$name}
{/foreach}
//is even/odd by 可以用于奇偶交错
$num_count = array(1, 2, 3, 4, 5, 6,7,8,);
{foreach $num_count as $name}
{if $name@iteration is even by 3}
<b>{$name}</b>
{else}
{$name}
{/if}
{/foreach}