{foreach}用来遍历一个单一关联数组,不象{section}那样是遍历数据数组。{foreach}的语法要比{section}简单的多,但是其缺点是只能用于单一关联数组。每个{foreach}标记必需用{/foreach}标记闭合。
属性名 | 类型 | 必需? | 缺省 | 描述 |
---|---|---|---|---|
from | array | Yes | n/a | 要遍历的数组 |
item | string | Yes | n/a | 当前元素的变量名 |
key | string | No | n/a | 当前键值的变量名 |
name | string | No | n/a | 当前foreach循环的名,用来访问foreach属性 |
{foreach}循环的name可以是任意值,由字母、数字、下划线构成,就像PHP变量一样。
{foreach}循环可以嵌套,而各嵌套的{foreach}名称必须相互唯一。
from属性通常是一个值的数组,确定了{foreach}循环的次数。
注意:name属性只有在你需要存取{foreach}属性时才是必要的,这和{section}不同。存取的{foreach}属性,如果其name未定义,不会抛出异常,但是结果是不可预料的。
例子7-6. 演示item和key属性
输出$myArray为键/值对的模板,如同PHP的foreach。
上例将输出:
|
例子7-8. {foreach}带有嵌套的item和key 复制一个数组给Smarty,其键值包含每个循环值的键:
输出$contact的模板:
上例将输出:
|
例子7-9. 使用{foreachelse}的数据库例子 一个数据库(PEAR或ADODB)的搜索脚本的例子,查询结果赋值给Smarty:
如果没有找到结果,那么模板将通过{foreachelse}输出"None found":
|