首页 理论教育ThinkPHP模板引擎数据循环方式简介

ThinkPHP模板引擎数据循环方式简介

【摘要】:ThinkPHP默认的模板引擎提供了3种数据循环方式,分别为volist、foreach以及for标签。在实际应用开发中,一般只需要使用volist标签的name和id属性即可完成大多数的数据循环。key:数据循环时的临时变量,相当于从0开始的索引号,默认变量名为i。

利用视图引擎的assign方法可以将包括数组在内的数据分配到模板处理。在模板中,开发人员可以使用传统的下标或索引取到数组内的数据,例如$list[“title”]。这种方式只能获取到单一的数据,如果一个数组集合中存在大量的数据(例如数据表集),那么就需要使用循环语句逐条读取。ThinkPHP默认的模板引擎提供了3种数据循环方式,分别为volist、foreach以及for标签。这3对标签可以混合使用,但它们都有各自的适用对象,下面分别进行介绍。

1.volist标签

volist标签是一对功能强大,使用方便的数据循环标签,它支持多维或一维数组的循环。由于它容易使用,并且语法灵活,所以在ThinkPHP模板中该标签比较常见。volist标签被模板引擎解释后将转换成foreach()…endforeach语句。一条简单的volist标签语句格式如下代码所示。

如上述代码所示,数据源支持PHP所有数组(不支持对象),临时变量名称可以自定义,该变量名决定了在循环体中可以使用的数组名称。为了方便演示,这里将在控制器index动作中定义一个多维数组,如以下代码所示。

上述代码中定义了1个数组,并定义了3条数据。在index.html中可以使用volist标签将数组数据循环输出,如以下代码所示。

如上述代码所示,list为数组变量,该变量由index动作分配。在标签中直接引用变量只需要变量名即可,不需要定界符和“$”符号。$vo是一个临时变量(由volist标签id值指定),所有等待循环的数据都被存放在该变量中,$vo.user_name表示输出数组中的user_name键对应值,读者还可以像传统的PHP那样写成$vo[‘user_name’]。

在实际应用开发中,一般只需要使用volist标签的name和id属性即可完成大多数的数据循环。ThinkPHP为了能够使volist标签更加灵活,还提供了另外一些实用的可选属性,这些属性如下。

➢offset:起始数据序列。

➢length:数据结束序列。

➢key:数据循环时的临时变量,相当于从0开始的索引号,默认变量名为i。

➢mod:对key值取模。

➢empty:当name数组为空时显示的字符串信息。(www.chuimin.cn)

offset和length配合使用能够实现简单的数据分页功能,如果数组信息过多,可以使用offset和length分片输出,如以下代码所示。

上述代码表示只循环索引号2~6之间的数据,利用offset和length属性,可以方便地控制页面中的局部数据。

2.foreach标签

foreach标签是volist标签的简化版,使用方式一样,最终生成的PHP代码也一样。唯一不同的就是foreach标签不支持volist中可选属性(只支持key)。另外,foreach不仅可以循环PHP数组,还可以循环对象。foreach的临时变量使用item代替volist中的id。如以下代码所示。

3.for标签

for标签也是一种可以实现数据循环的标签,最终生成的代码就是PHP中的for语句块。无论是简洁性、易用性还是程序的运行速度都不及volist、foreach标签。但for标签不仅可以循环数组,还可以循环普通的PHP变量、函数等,常用在局部统计、更新等场合。for标签格式如下。

一条最简单的for标签语句只需要开始值和结束值即可,这些变量值都支持模板或者控制器动作中的变量值,如以下代码所示。

在for标签中使用变量与volist、foreach标签不同,在for标签中使用变量必须在变量名称上加上“$”,并且变量不支持“|”函数引用符号。for标签可选属性如下。

➢comparison:start与end的条件,默认为lt(小于)。常用的有elt(等于或小于)、eq(等于)。

➢step:步进条数。

➢name:循环时的变量名,默认为i。