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;
}