PHP-无限级分类(迭代法创建)

 1 <?php
 2 $area = array(
 3     array('id' => 1, 'name' => '安徽', 'parent' => 0),
 4     array('id' => 2, 'name' => '海淀', 'parent' => 7),
 5     array('id' => 3, 'name' => '濉溪县', 'parent' => 5),
 6     array('id' => 4, 'name' => '昌平', 'parent' => 7),
 7     array('id' => 5, 'name' => '淮北', 'parent' => 1),
 8     array('id' => 6, 'name' => '朝阳', 'parent' => 7),
 9     array('id' => 7, 'name' => '北京', 'parent' => 0),
10     array('id' => 8, 'name' => '上地', 'parent' => 2)
11 );
 1 #找父栏目、父父栏目#
 2 function parent_tree($arr, $id)
 3 {
 4     $par_arr = array();
 5 
 6 //var_dump($id);
 7     while ($id !== 0) {
 8 //外层循环的作用:0表示最顶层的栏目 等于0就表示无父栏目/父父栏目 只要不等于0就表示有上级目录 则循环
 9         foreach ($arr as $v) {
10 //内层循环的作用:遍历数组查找出来$id对应的值  若找到了  该值就是它自身(第一次就是它自己)和父栏目/父父栏目..然后存入数组并终止循环(break)
11             if ($v['id'] == $id) {
12                 $par_arr[] = $v;
13                 $id = $v['parent'];
14                 break;
15             }
16         }
17     }
18     return $par_arr;
19 }
 1 #找子孙栏目#
 2 function sub_tree($arr, $parent = 0)
 3 {
 4     $task = array($parent);
 5 //创建任务表
 6     $subs = array();
 7 //存子孙栏目的数组
 8     while (!empty($task))//如果任务表不为空 就表示要做任务
 9     {
10         $flag = false;//默认没找到子树
11         foreach ($arr as $k => $v) {
12             if ($v['parent'] == $parent) {
13                 $subs[] = $v;
14             }
15             array_push($task, $v['id']);//借助栈 把新的地区的id压入栈
16             $parent = $v['id'];
17             unset($arr[$k]);
18 //把找到的单元unset掉
19             $flag = true;
20         }
21     }
22     if (!$flag) {//表示没找到子树
23         array_pop($task);
24         $parent = end($task);
25     }
26     /*echo '<pre>'; print_r($task);            echo '</pre>';*/
27 
28     return $subs;
29 }

 

posted @ 2016-11-09 13:52  会弹琴的Coder  阅读(179)  评论(0编辑  收藏  举报