ThinkPHP中foreach和volist的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP中foreach和volist的区别相关的知识,希望对你有一定的参考价值。

参考技术A Thinkphp中foreach和volist的区别
1.foreach标签
foreach标签用于循环输出:
foreach(name,item,key)
name(必须):要输出的数据模板变量
item(必须):循环单原变量
key(可选):循环的key变量,默认值为key
示例:
<foreach name='list' item='vo'>
$vo.id
$vo.name
</foreach>
foreach标签相对于volist标签简洁,没有volist标签那么多功能。优势是可以对对象进行遍历输出,而volist标签通常是用于输出数组。
2.volist标签
volist标签主要用于在模板中循环输出数据集或者多维数组
volist(name,id,offset,length,key,mod,empty)
name(必须):要输出的数据模型变量
id(必须):循环变量
offset(可选):要输出数据的offset
length(可选):输出数据的长度
key(可选):循环的key变量,默认值为i
mod(可选):对key值取模,默认为2(用于偶数行查询等)
empty(可选):如果数据为空显示的字符串
通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。
在Action中首先对模板赋值:
$user=M('User');
$list=$user->select();
$this->assign('list',$list);
$this->display();
在模板定义如下,输出编号和姓名
<volist name='list' id='vo'>
$vo.id
$vo.name
</volist>
支持输出部分数据,例如输出其中的第5-15条记录:
<volist name='list' id='vo' offset='5' length='10'>
$vo.id
$vo.name
</volist>
输出偶数行记录:
<volist name='list' id='vo' mod='2'>
<eq name="mod" value='1'>$vo.name</eq>
</volist>
mod属性还用于控制一定记录的换行:
<volist name='list' id='vo' mod='5'>
$vo.name
<eq name="mod" value='4'><br/></eq>
</volist>
输出循环变量:
<volist name='list' id='vo' key='k'>
$k.$vo.name
</volist>
如果没有指定key属性的话,默认使用循环变量i,例如:
<volist name="list" id="vo" >
$i.$vo.name
</volist>
如果要输出数组的索引,可以直接使用key变量,和循环变量不同的是,这个key是由数据本身决定,而不是循环控制的,例如:
<volist name="list" id="vo" >
$key.$vo.name
</volist>
volist还有一个别名iterate,用法和volist是一样。
从2.1版开始允许使用函数设定数据集,如:
<volist name=":fun('arg')" id="vo">$vo.name</volist>本回答被提问者和网友采纳

thinkphp使用foreach遍历的方法

  我们在做一些需求的时候可能会对遍历的上限有一定的要求,这时候就需要对上限进行限定

    首先使用foreach遍历的输出数组相比较于volist功能较少

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

     具体的解释参考手册。

但是foreach可以对对象进行遍历输出,而volist通常用于输出数组。

    例如下面的代码:

每次循环做++运算,但是加一个判断语句就可以对其进行限制上限,继续执行下面的判断方法。

foreach($list1 as &$rs){
        $Num++;
        if($Num<10){
       $rs[‘tx_zt‘]=1;
        $ppdd = M(‘ppdd‘)->where(array(‘id‘=>$rs[‘r_id‘]))->find();
       if($Pid==$ppdd[‘p_id‘]) $rs[‘ts_zt‘]=0;
        if(! empty($ppdd[‘old_pid‘])){
            if($Pid==$ppdd[‘old_pid‘]) $rs[‘tx_zt‘]=0;
         if($ppdd[‘skt‘]==0) $rs[‘tx_zt‘]=0;

      }
          if($count1==$Num) $rs[‘tx_zt‘]=0;
        }
    }














以上是关于ThinkPHP中foreach和volist的区别的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp使用foreach遍历的方法

thinkphp volist 排序问题

thinkphp中volist标签 增加if判断。

TP中循环遍历

thinkphp5 - volist套层循环查询

thinkphp5 - volist套层循环查询