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 }