最近因为项目的缘故,要使用到volist。在这个过程中,遇到了一些小问题,主要就是volist在循环输出多重数据的时候,如何输出key。网上查阅了不少资料,很失望的是,大多资料就是粘贴复制Thinkphp手册上volist标签的说明。为了帮助其他人,故决定写下这篇文章。( 在这里,使用的框架是Thinkphp3.2,其它的相关知识,是php数组)。首先贴出控制器里面代码:
public function check(){$multiArr = [['a' => ['num' => '1',],'b' => ['num' => '2',]],['c' => ['num' => '3',],'d' => ['num' => '4',]]];$this->assign('list', $multiArr);$this->display();}
打印出来的格式如下:
Array
([0] => Array([a] => Array([num] => 1)[b] => Array([num] => 2))[1] => Array([c] => Array([num] => 3)[d] => Array([num] => 4)))
很明显,这是一个多重数组。如果想得到他们的key值,如果使用volist,代码如下:
<tr><volist name&#61;"list" id&#61;"data" key&#61;"k"><td>{$k}td><td><tr><volist name&#61;"data" id&#61;"vo"><td>{$key}td><td>{$vo.num}td>volist>tr>td>volist>tr>
得到的结果如下&#xff1a;
1
a 1 b 2
2
c 3 d 4
在这里&#xff0c;很明显&#xff0c;外重的循环的key值是系统默认的&#xff0c;而里面的这一重循环出来的key值是由数据本身决定的而不是由循环控制的。
http://document.thinkphp.cn/manual_3_2.html#volist
在Thinkphp手册里面&#xff0c;这个说的很清楚。如果到这里&#xff0c;没其他的要求的话&#xff0c;其实可以满足大多数输出key值的要求了。但是如果数组改成下面的格式&#xff1a;
$multiArr &#61; [&#39;aaa&#39; &#61;> [&#39;a&#39; &#61;> [&#39;num&#39; &#61;> &#39;1&#39;,],&#39;b&#39; &#61;> [&#39;num&#39; &#61;> &#39;2&#39;,]],&#39;bbb&#39; &#61;> [&#39;c&#39; &#61;> [&#39;num&#39; &#61;> &#39;3&#39;,],&#39;d&#39; &#61;> [&#39;num&#39; &#61;> &#39;4&#39;,]]];
并且此时&#xff0c;外重循环出的key值和内层循环出的key值均由数据本身决定&#xff0c;而不是循环控制的&#xff0c;那该怎么处理呢&#xff1f;好吧&#xff0c;当时走入误区了&#xff0c;一直想用两个volist进行循环&#xff0c;然后输出key值(它由数据本身决定)&#xff0c;但是尝试了好久&#xff0c;发现还是不行。查阅了不少的资料&#xff0c;发现好多都没有讲到这个问题。谋杀了无数脑细胞&#xff0c;看着代码&#xff0c;突然想到&#xff0c;foreach也可以进行这种循环操作&#xff0c;为啥不尝试用这个标签呢&#xff1f;或者把这两个标签结合起来使用呢&#xff1f;顿时&#xff0c;豁然开朗。于是&#xff0c;把前端的代码改成如下:
<tr><foreach name&#61;"list" item&#61;"data" key&#61;"i"><td>{$i}td><td><tr><volist name&#61;"data" id&#61;"vo" key&#61;"k"><td>{$key}td><td>{$vo.num}td>volist>tr>td>foreach>tr>
得到的结果如下&#xff1a;
aaa
a 1 b 2
bbb
c 3 d 4
满足了上面的要求。总结如下&#xff1a;
在thinkphp中&#xff0c;用volist标签进行多重数组循环输出的时候&#xff0c;若想输出由数据控制的key值&#xff0c;而不是默认的&#xff0c;可以把foreach标签和volist标签结合起来使用&#xff0c;就能原样输出key值了。