3月 6, 2017 - php开发, 循环遍历    4 Comments

3层目录的遍历

1.先看一张结果图:

明显技术属于第一层,后端开发属于第二层,java属于第三层.要想这样的遍历出来,首先要设计表的时候就要设计多加一个字段,类似于无限极分类的一样,增加一个父字段,这里叫做:p1,那第一层的p1就都是零了.技术的自增id叫jid吧.

思路:要遍历三层,第一层比较好遍历,判断p1等于零就ok了,但第二层第三层怎么办, 考虑一下把第二层第三层的数据当做第一层的数组的一个键,第三层当第二层的一个键.注:$data是所查职位表的所有数据,是数组的形式,若不是数组则先要转换成数组的形式.

图片代码几解释如下:

$tree = array();

foreach($data as $k=>$v) //将data循环
{
if($v[‘p1’] == 0) //先循环p1=0的数据
{
unset($data[$k]); //unset掉是为了不再遍历上一个值(已经遍历过了)让下一个循环少一个遍历,当然也可以不写,只是得多几次多余的循环
foreach($data as $k1=>$v1)
{
if($v1[‘p1’] == $v[‘jid’]) //找到p1(父id)=前一数据$v的jid
{
unset($data[$k1]); //原理同上
foreach($data as $k2=>$v2)
{
if($v2[‘p1’] == $v1[‘jid’]) //循环找到p1(父id)=前一数据$v1的jid
{
unset($data[$k2]); //原理同上
$v1[‘children’][] = $v2; //将第三层的数据当第二层$v1的键[children](一定要有,否则前台不容易遍历出   来)
}
}
$v[‘children’][] = $v1;//将第二层的数据当第一层$v的键[children](一定要有,否则前台不容易遍历出来)
}

}
$tree[] = $v;//将数组赋给$tree
}
}
return $tree;
打印出来的结果是这样的形式:(自动忽略p2即可,此处没有用到它)

然后再遍历到模板上即可:注:我用的是laravel的blade模板.

最后若你从数据库中查出来是对象的形式,那么再给你一个对象转为字符传串的方法:

public function object2array($object) {    //对象转成数组的形式
      if (is_object($object)) {
        foreach ($object as $key => $value) {
          $array[$key] = $value;
        }
      }
      else {
        $array = $object;
      }
      return $array;
    }

评论被关闭。