smarty的的foreach在我的实际开发中比较常用,主要用于列表生成,因为数据的查询结果多以数组形式返回,相比section,foreach灵活的数组应用在smarty中非常好用,建议大家使用 foreach,并且了解其特性,例如,循环次数统计,没有循环时执行的操作,后两者使用,相信很少有人注意到
用{section}可以这样,只要改变loop的值就可以改变值变量范围!
相当与php 的for ()循环,
{section loop=10000 name=a}
{$smarty.section.a.iteration} {* iteration属性并不受start 与step的影响*}
{/section}
{section loop=10000 name=a start=1 step=2}
{$smarty.section.a.index}
{/section}
foreach主要是用来针对关联数据,比较适用用于列表生产。仅能用于数组,PHP5后可以遍历对象,使用范围自然会比for小了。
section 的使用范围要更广范
举几个例子:
一、
$name=array('one','tow','three','four');
foreach输出
<{foreach item=item from=$name}>
<{$item}>
<{/foreach}>
结果
one tow three four
section输出
<{section name=name loop=$name}>
<{$name[name]}>
<{/section}>
结果one tow three four
二、
$name=array('a'=>'one','b'=>'tow','c'=>'three','d'=>'four');
这种情况下,用foreach可以输出正常
用section没有输,这就是说,section在处理一维数组是,不能处理带非数值索引的
例:可以处理array('a','b'),array(1=>'a',2=>'b'),不能处理array('a'=>'a','b'=>'b')这样的
三、
$name=array(array('title'=>'a','body'=>'b'),array('title'=>'c','body'=>'d'));
以下都可以输出
<{foreach key=key item=item from=$name}>
<{$item.title}><br>
<{/foreach}>
<{section name=name loop=$name}>
<{$name[name].title}>
<{/section}>
四、
$name=array(array('a','b'),array(‘c','d'));
以下都 可输出
<{foreach key=key item=item from=$name}>
<{$item.0}><br>
<{/foreach}>
<{section name=name loop=$name}>
<{$name[name].0}>
<{/section}>