foreach与volist的区别

    今天又开始了对寒假遗留的大学生心理测试系统代码的重构工作,由于之前整个系统用的是tp3.2的框架,用的是smarty模版,现在改成使用TP5的框架,使用的是其自带的think模版,所以很多关键代码需要重写。今天就记录一下代码重构过程中遇到的将smarty模版下的foreach方法替换成think模版下的volist方法,以及volist的嵌套循环问题。

   foreach方法用于像循环访问一个数字索引数组一样循环访问一个关联数组,但是仅局限于单个数组,每个{foreach}标记必须与关闭标志{/foreach}同时出现。



volist标签用于在模版中循环输出数据集或者多维数组





下面主要说一下我碰到的将foreach转换成volist的情形:


以上两句话是等价的,但是volist中的name 属性是与foreach中的from属性是相对应的,这样一来那foreach中的name属性无法在volist中得到实现,但是其实volist中有一个隐含的属性i,i记录了当前循环的次数,这个是个非常重要的知识点,可以很好的解决我接下来遇到的问题


可以看到foreach是利用了name这个属性的值来判断当前循环是否到达最后一个,但是由于volist标签没有该属性,但是利用隐藏的i属性就可以很好的解决这个问题了,以上的$it.opt是volist中的name属性的值


好了,再说一说我遇到的volist中的循环嵌套问题


首先说明一下,test是一个数组,it.opt是test数组中的一个数组,这里需要注意的一点是,这个时候的标签一定要用<>括起来,否则老是报错



volist的if判断