Heim > php教程 > php手册 > Hauptteil

smarty foreach详细说明

WBOY
Freigeben: 2016-06-13 09:08:26
Original
900 Leute haben es durchsucht

smarty foreach详细说明

关于smarty foreach的知识,这里对其作用和用法做一个详细的说明。

smarty {foreach} 用于像循环访问一个数字索引数组一样循环访问一个关联数组,与仅能访问数字索引数组的{section}不同,{foreach}的语法比{section}的语法简单得多,但是作为一个折衷方案也仅能用于单个数组。每个{foreach}标记必须与关闭标记{/foreach}成对出现。

smarty foreach 有如下属性:

属性名称 Type类型 Required必要 Default默认值 Description描述
from array数组 Yes必要 n/a 循环访问的数组
 
item string字符串 Yes必要 n/a 当前元素的变量名
 
key string字符串 No可选 n/a 当前键名的变量名
 
name string字符 No可选 n/a 用于访问foreach属性的foreach循环的名称
 

foreach 是除 section 之外处理循环的另一种方案(根据不同需要选择不同的方案).

foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比 section 简单许多,缺点是只能处理简单数组.

foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性.

name 属性可以任意指定(字母、数字和下划线的组合).

{foreach}循环的name可以是任何字母,数组,下划线的组合,参考PHP变量。

{foreach}循环可以嵌套,嵌套的{foreach}的名称应当互不相同。

from属性通常是值数组,被用于判断{foreach}的循环次数。

在from变量中没有值时,将执行{foreachelse}。

{foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其中"name"是name属性。

注意:name属性仅在需要访问{foreach}属性时有效,与{section}不同。访问未定义name的{foreach}属性不会抛出一个错误,但将导致不可预知的结果。

smarty {foreach} 除了以上属于参数的属性外还有几个非参数形式的属性:index, iteration, first, last, show, total ,下面一一说明:

属性名称 Description描述
index 用于访问当前foreach的索引值,index总是从0开始
iteration

iteration 用于显示当前循环的执行次数,iteration 总是从 1 开始,每执行一次增加 1

first 当前 foreach 循环第一次执行时 first 被设置成 true
 
last 当前 foreach 循环执行到最后一遍时 last 被设置成 true
 
show show 是 foreach 的一个参数. 取值为布尔值 true 或 false. 如果指定为 false 该循环不显示,如果循环指定了 foreachelse 子句,该子句显示与否也取决于 show 的取值
total total 用于显示循环执行的次数,可以在循环中或循环执行后调用
 

下面看几个例子分别说明 smarty foreach 各属性的用法:

(1)演示item和key属性

$arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
$smarty->assign('myArray', $arr);
?>

用模板按键名/键值对的形式输出$myArray, 类似于PHP的foreach。


    {foreach from=$myArray key=k item=v}
  • {$k}: {$v}

  • {/foreach}

     
上例将输出:


  • 9: Tennis

  • 3: Swimming

  • 8: Coding

 (2)当foreach的item属性是关联数组时

$items_list = array(
    23 => array('no' => 2456, 'label' => 'Salad'),
    96 => array('no' => 4889, 'label' => 'Cream')
);
$smarty->assign('items', $items_list);
?> 
  
模板中,url通过$myId输出$items


  
上例将输出:

(3)foreach使用嵌套的item和key

向Smarty设置一个数组,对于每个键名对应的每个循环值都包括键。

   $smarty->assign('contacts', array(
                             array('phone' => '1',
                                   'fax' => '2',
                                   'cell' => '3'),
                             array('phone' => '555-4444',
                                   'fax' => '555-3333',
                                   'cell' => '760-1234')
                             ));
?>
  
用于输出$contact的模板。

{foreach name=outer item=contact from=$contacts}
 



 {foreach key=key item=item from=$contact}
  {$key}: {$item}

 {/foreach}
{/foreach}
  
上例将输出:
 


 phone: 1

 fax: 2

 cell: 3



 phone: 555-4444

 fax: 555-3333

 cell: 760-1234
 
  
(4)smarty foreach index 属性用法

{* 每五行输出一次头部区块 *}


{foreach from=$items key=myId item=i name=foo}
  {if $smarty.foreach.foo.index % 5 == 0}
    
  {/if}
 
{/foreach}
Title
{$i.label}

(5)smarty foreach iteration 属性用法

{* 该例将输出0|1, 1|2, 2|3, ... 等等 *}
{foreach from=$myArray item=i name=foo}
{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
{/foreach}

(6)smarty foreach first 属性用法

{* 对于第一个条目显示LATEST而不是id *}


{foreach from=$items key=myId item=i name=foo}

 
 

{/foreach}
{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if} {$i.label}

(7)smarty foreach last 属性用法

{* 在列表结束时增加一个水平标记 *})
{foreach from=$items key=part_id item=prod name=products}
  {$prod}{if $smarty.foreach.products.last}


{else},{/if}
{foreachelse}
  ... content ...
{/foreach}

(8)smarty foreach show 属性用法

show是{foreach}的参数. show是一个布尔值。如果值为FALSE,{foreach}将不被显示。如果有对应的{foreachelse},将被显示。

(9)smarty foreach total 属性用法

{* 在结束位置显示行数 *}
{foreach from=$items key=part_id item=prod name=foo}
{$prod.name>



{if $smarty.foreach.foo.last}
 
{$smarty.foreach.foo.total} items

{/if}
{foreachelse}
 ... something else ...
{/foreach}

ok,关于 smarty foreach 就总结这么多了,更多关于smarty的知识,请参照本站:smarty知识专题

您可能感兴趣的文章

  • array_walk 和 foreach, for 的效率的比较,php性能优化
  • 关于使用in_array() foreach array_search() 查找数组是否包含时的性能对比
  • smarty模板中for循环的扩展插件
  • smarty include file 使用变量的方法
  • php在数组中查找某个值是否存在(in_array(),array_search(),array_key_exists())
  • smarty模板中使用php函数以及smarty模板中如何对一个变量使用多个函数
  • select into from 和 insert into select 的区别和用法
  • Fatal error Class 'ZipArchive' not found ...... 的解决办法
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage