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 }