THINKPHP5 volist标签循环不能设置循环变量为$i
在thinkphp5的volist标签中不要用$i作为id,举个简单例子
控制器这样写

模板这样写

结果是

这很令人费解啊。然后换一个循环变量看看


循环正常了,看来这个id这里设置循环变量的时候 不能设置为i。翻看手册 发现有一条

这说明了key属性默认是i,这样一来冲突了,出现了覆盖,就出现了奇怪现象,最后一个单词总是比实际的后移了一位ascii码 比如 php变为了phq,mysql变为了mysqm,linux变为了linuy,都是差一位,这真是一个奇怪的现象啊
然后我看了一下框架解析标签后的代码,在runtime/tmp里面
找到了代码
<?php if(is_array($list) || $list instanceof \think\Collection || $list instanceof \think\Paginator): $i = 0; $__LIST__ = $list;if( count($__LIST__)==0 ) : echo "" ;else: foreach($__LIST__ as $key=>$i): $mod = ($i % 2 );++$i;?>
<?php echo $i; ?><br/>
<?php endforeach; endif; else: echo "" ;endif; ?>
这代码不太好理解,我删掉了部分,得到如下
<?php if(is_array($list): $i = 0; $__LIST__ = $list;if( count($__LIST__)==0 ) : echo "" ;else: foreach($__LIST__ as $key=>$i): $mod = ($i % 2 );++$i;?>
<?php echo $i; ?><br/>
<?php endforeach; endif; else: echo "" ;endif; ?>
这是用的PHP的原始的foreach和if的标签,我更改一下这个标签就变为
<?php
if(is_array($list)
{
$i = 0;
$__LIST__ = $list;
if( count($__LIST__)==0 )
{
echo "" ;
}else{
foreach($__LIST__ as $key=>$i)
{
$mod = ($i % 2 );++$i;
echo $i;
?>
<br/>
<?php
}
}else
{
echo "" ;
}
}
?>
我们可以看到,主要是foreach循环这一步,简化一下,由于 $list赋值给$__LIST__然后用$__LIST__循环出来的,所以可以直接简化为

从这里我们看到了,循环之后 $mod几乎没起到什么作用,然后就++$i然后输出$i,我们直接做测试看看

果然我们复现了问题,其实就是每个循环的游标变量都自增了一下,然后被输出,这就是为什么 php变为了phq,mysql变为了mysqm,linux变为了linuy,原来如此啊,看来我们不能大意,不要随便给volist标签中的id赋值为i啊!
现在我们可以指明这个游标变量的名字看看

果然解析后的代码如下

看到了吧,这样就不会游标元素值就不会自增了,而是索引自增。
这回是彻底搞明白了,哈哈哈
THINKPHP5 volist标签循环不能设置循环变量为$i的更多相关文章
- Thinkphp5.0 的视图view的循环标签
Thinkphp5.0 的视图view的循环标签 volist标签: <!-- 使用volist --> <!-- name是传递过来的要循环变量名 --> <!-- k ...
- 为什么说for循环设置循环变量的那部分是一个父作用域?
最近在看阮一峰老师的<ES6> 看到let时,发现一处for循环很神奇的地方. 书中的原话是:“另外,for循环还有一个特别之处,就是设置变量的那部分是一个父作用域,而循环体内部是一个单独 ...
- ThinkPhp5 中Volist标签的用法
Volist标签一般是和内置方法assign()搭配使用,将值从后台传到前台,是当下比较流行的一种传值方法 本文实例讲述了ThinkPHP模板循环输出Volist标签用法.分享给大家供大家参考,具体如 ...
- bash的循环中无法保存变量
在bash中,如果循环在一个子shell中运行,那么在循环中对循环外面的变量的更改将在循环退出后不可见.像下面的例子: #!/bin/sh python run.py | while read lin ...
- 【Javascript】: for循环中定义的变量在for循环体外也有效
for循环中定义的变量在for循环体外也有效 <script> (function(){ var a = 111; for(var i=0;i<5;i++){ var carl = ...
- 原创:如何实现在Excel通过循环语句设置指定行的格式
原创:如何实现在Excel通过循环语句设置指定行的格式 一.需求: 想让excel的某些行(比如3的倍数的行)字体变成5号字 如何整: 二.实现: Sub code() To Range(" ...
- 11 tensorflow在tf.while_loop循环(非一般循环)中使用操纵变量该怎么做
代码(操纵全局变量) xiaojie=1 i=tf.constant(0,dtype=tf.int32) batch_len=tf.constant(10,dtype=tf.int32) loop_c ...
- 不可在 for 循环体内修改循环变量,防止 for 循环失去控制
不可在 for 循环体内修改循环变量,防止 for 循环失去控制. #include <iostream> /* run this program using the console pa ...
- 每个分组函数相当于一个for循环 将集合的变量不断遍历
每个分组函数相当于一个for循环 将集合的变量不断遍历
随机推荐
- register form
<code class="language-html"><div class="width100 marT15 content_news_list&qu ...
- hdu2896之AC自动机
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- scrollView 刷新显示在中间的问题
scrollView问题 打开activity之后 屏幕初始位置不是顶部 而是在中间 也就是scroll滚动条不在上面 而是在中间 楼主你好,我大概是和你遇见了同样的问题,你可以灵活处理一下,不要去管 ...
- Knockout.Js官网学习(Mapping高级用法一)
前言 有时候,在使用ko.mapping.fromJS的时候,可能有必要去使用mapping的高级用法来定义mapping的详细过程,以后定义了,以后再调用的时候就不必再定义了.这里有一些情形,你可能 ...
- 异常 try catch finally return 执行关系 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 卡尔曼滤波(Kalman Filter) ZZ
一.引言 以下我们引用文献[1]中的一段话作为本文的開始: 想象你在黄昏时分看着一仅仅小鸟飞行穿过浓密的丛林.你仅仅能隐隐约约.断断续续地瞥见小鸟运动的闪现.你试图努力地猜測小鸟在哪里以及下一时刻它会 ...
- Eclipse的预设的Include的路径
http://www.eclipse.org/community/eclipse_newsletter/2013/october/article4.php 说明链接 http://www.eclips ...
- [Canvas]空战游戏进阶 增加发射子弹 敌机中弹爆炸功能
点此下载源码. 图例: 源码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv=" ...
- 【Mac使用系列】Mac锁屏及快捷键
mac锁屏办法,我有所尝试,可用系统自带锁屏快捷键:Ctrl + Command + Q或者参考方法2,直接设置TouchBar. 这两种办法,亲测可用.我直接设置了TouchBar,锁屏解锁离得很近 ...
- iOS 录制视频MOV格式转MP4
使用UIImagePickerController系统控制器录制视频时,默认生成的格式是MOV,如果要转成MP4格式的,我们需要使用AVAssetExportSession; 支持转换的视频质量:低, ...