Thinkphp volist多重循环原样输出数组key值

 4392

下面由thinkphp框架开发栏目给大家介绍Thinkphp volist多重循环原样输出数组key值的使用总结,希望对需要的朋友有所帮助!


Thinkphp volist多重循环原样输出数组key值


最近因为项目的缘故,要使用到volist。在这个过程中,遇到了一些小问题,主要就是volist在循环输出多重数据的时候,如何输出key。网上查阅了不少资料,很失望的是,大多资料就是粘贴复制Thinkphp手册上volist标签的说明。为了帮助其他人,故决定写下这篇文章。( 在这里,使用的框架是Thinkphp3.2,其它的相关知识,是php数组)。首先贴出控制器里面代码:

  1. public function check()
  2. {
  3.     $multiArr = [['a' => ['num' => '1',], 'b' => ['num' => '2',]], ['c' => ['num' => '3',], 'd' => ['num' => '4',]]];
  4.     $this->assign('list', $multiArr);
  5.     $this->display();
  6. }

打印出来的格式如下:

  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [a] => Array
  6.                 (
  7.                     [num] => 1
  8.                 )
  9.             [b] => Array
  10.                 (
  11.                     [num] => 2
  12.                 )
  13.         )
  14.     [1] => Array
  15.         (
  16.             [c] => Array
  17.                 (
  18.                     [num] => 3
  19.                 )
  20.             [d] => Array
  21.                 (
  22.                     [num] => 4
  23.                 )
  24.         )
  25. )

很明显,这是一个多重数组。如果想得到他们的key值,如果使用volist,代码如下:

  1. <tr>
  2.     <volist name="list" id="data" key="k">
  3.     <td>{$k}</td>
  4.     <td>
  5.         <tr>
  6.             <volist name="data" id="vo">
  7.             <td>{$key}</td>
  8.             <td>{$vo.num}</td>
  9.             </volist>
  10.         </tr>
  11.     </td>
  12.     </volist>
  13. </tr>

得到的结果如下:

  1. 1
  2. a   1   b   2
  3. 2
  4. c   3   d   4

在这里,很明显,外重的循环的key值是系统默认的,而里面的这一重循环出来的key值是由数据本身决定的而不是由循环控制的。

  1. http://document.thinkphp.cn/manual_3_2.html#volist

在Thinkphp手册里面,这个说的很清楚。如果到这里,没其他的要求的话,其实可以满足大多数输出key值的要求了。但是如果数组改成下面的格式:

  1. $multiArr = [
  2.         'aaa' => [
  3.             'a' => [
  4.                 'num' => '1',
  5.             ],
  6.             'b' => [
  7.                 'num' => '2',
  8.             ]
  9.         ],
  10.         'bbb' => [
  11.             'c' => [
  12.                 'num' => '3',
  13.             ],
  14.             'd' => [
  15.                 'num' => '4',
  16.             ]
  17.         ]
  18.     ];

并且此时,外重循环出的key值和内层循环出的key值均由数据本身决定,而不是循环控制的,那该怎么处理呢?好吧,当时走入误区了,一直想用两个volist进行循环,然后输出key值(它由数据本身决定),但是尝试了好久,发现还是不行。查阅了不少的资料,发现好多都没有讲到这个问题。谋杀了无数脑细胞,看着代码,突然想到,foreach也可以进行这种循环操作,为啥不尝试用这个标签呢?或者把这两个标签结合起来使用呢?顿时,豁然开朗。于是,把前端的代码改成如下:

  1. <tr>
  2.     <foreach name="list" item="data" key="i">
  3.        <td>{$i}</td>
  4.        <td>
  5.            <tr>
  6.                <volist name="data" id="vo" key="k">
  7.                    <td>{$key}</td>
  8.                    <td>{$vo.num}</td>
  9.                </volist>
  10.            </tr>
  11.        </td>
  12.     </foreach>
  13. </tr>

得到的结果如下:

  1. aaa
  2. a   1   b   2
  3. bbb
  4. c   3   d   4

满足了上面的要求。总结如下:

在thinkphp中,用volist标签进行多重数组循环输出的时候,若想输出由数据控制的key值,而不是默认的,可以把foreach标签和volist标签结合起来使用,就能原样输出key值了。


本文网址:https://www.zztuku.com/index.php/detail-7815.html
站长图库 - Thinkphp volist多重循环原样输出数组key值
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐