加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜新站长网 (https://www.0418zz.com.cn/)- 管理运维、AI硬件、数据集成、云备份、负载均衡!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Thinkphp volist 多重循环原样输出数组key值的使用总结

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

(编辑:阜新站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读