Smarty:foreach函数 您所在的位置:网站首页 smarty3 Smarty:foreach函数

Smarty:foreach函数

2023-01-20 06:25| 来源: 网络整理| 查看: 265

本节包含以下函数@index@iteration@first@last@show@total{break}{continue}{foreach},{foreachelse}

{foreach}用于循环数组。 {foreach}的语法比{section}循环要更简单和清晰,并且可以使用非数字下标的数组。

{foreach $arrayvar as $itemvar}

{foreach $arrayvar as $keyvar=>$itemvar}

温馨提示:

foreach的语法可以接受没有名称的属性,该语法是Smarty 3新增的。然而Smarty 2语法 {foreach from=$myarray key="mykey" item="myitem"}也同样支持。

{foreach} 循环可以被嵌套使用.

array变量,一般是数组的值,决定了{foreach} 循环的次数。你也可以传递一个任意的整数来控制循环次数。

如果array数组变量中,没有值的情况下, {foreachelse}将执行。

{foreach}的属性: @index, @iteration, @first, @last, @show, @total.

{foreach}的语法命令: {break}, {continue}.

代替指定key变量,你可以通过 {$item@key}来使用循环的当前key。(见下面的例子).

温馨提示:

$var@property的语法是Smarty 3新增的。然而Smarty 2风格的语法{foreach from=$myarray key="mykey" item="myitem"},$smarty.foreach.name.property也是支持的。

温馨提示:

即使你在循环语法里{foreach $myArray as $myKey => $myValue} 已经指定了key的变量名,但循环体内$myValue@key还是可用的。

可选标记:

名称说明nocache关闭{foreach}循环的缓存

Example 7.30. 简单的{foreach} 循环

模板将顺序输出$myColors。

{foreach $myColors as $color} {$color} {/foreach}

输出:

red green blue

Example 7.31. 使用key变量的例子

模板将以键值对的方式输出$myArray

{foreach $myPeople as $value} {$value@key}: {$value} {/foreach}

输出:

fname: John lname: Doe email: [email protected]

Example 7.32. 多维数组通过item 和 key来嵌套使用{foreach}

多维数组的键一般会对应另一个数组。

模板将输出$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)结果。例子是循环了一个PHP的迭代器(iterator)而不是一个数组(array)。

?> {foreach $res as $r} {$r.id} {$r.name} {foreachelse} .. no results .. {/foreach}

上面的例子显示了查询结果id 和 name两个字段的内容。

迭代器和数组循环哪个更高效呢?数组而言,每次循环之前全部的数组数据都会被先放到内存堆栈内,然后再进行循环。 而迭代器每次迭代循环时,都会载入并释放结果内容,这样可以节省运行时间和内存,尤其是当结果集非常大的时候。

@index

index是当前数组索引,从0开始计算。

Example 7.34. index 例子

{* output empty row on the 4th iteration (when index is 3) *} {foreach $items as $i} {if $i@index eq 3} {* put empty table row *} nbsp; {/if} {$i.label} {/foreach} @iteration

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} {$name} {/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} {$name} {else} {$name} {/if} {/foreach}

输出:

... ... ... ... ... ... ... ... ... ... ... ... ... @first

当循环{foreach}是首次循环时,first将为TRUE 下面我们用first来显示一个表格的表头。

Example 7.37. first例子

{* show table header at first iteration *} {foreach $items as $i} {if $i@first} key name {/if} {$i@key} {$i.name} {/foreach} @last

当{foreach}循环到了最后一次时, last将为TRUE。 下面我们将在循环的最后插入一条水平线。

Example 7.38. last例子

{* Add horizontal rule at end of list *} {foreach $items as $item} {$item.name}{if $item@last}{else},{/if} {foreachelse} ... no items to loop ... {/foreach} @show

show属性是在{foreach}循环执行之后, 检测循环是否显示数据的判断。 show是一个布尔值。

Example 7.39. show例子

{foreach $myArray as $name} {$name} {/foreach} {if $name@show} do something here if the array contained data {/if} @total

total是整个{foreach}循环的次数。 total可以在{foreach}内部,或者之后使用。

Example 7.40. total例子

{* show number of rows at end *} {foreach $items as $item} {$item.name} {if $item@last} {$item@total} items {/if} {foreachelse} ... no items to loop ... {/foreach}

参见{section}, {for} 和 {while}

{break}

{break}停止循环。

Example 7.41. {break} 例子

{$data = [1,2,3,4,5]} {foreach $data as $value} {if $value == 3} {* abort iterating the array *} {break} {/if} {$value} {/foreach} {* prints: 1 2 *} {continue}

{continue}将跳过当前本次循环并进入下一次循环。

Example 7.42. {continue} 例子

{$data = [1,2,3,4,5]} {foreach $data as $value} {if $value == 3} {* skip this iteration *} {continue} {/if} {$value} {/foreach} {* prints: 1 2 4 5 *}


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有