$area = array( array('id'=>1,'name'=>'安徽','parent'=>0), array('id'=>2,'name'=>'海淀','parent'=>7), array('id'=>3,'name'=>'濉溪縣','parent'=>5), array('id'=>4,'name'=>'昌平','parent'=>7), array('id'=>5,'name'=>'淮北','parent'=>1), array('id'=>6,'name'=>'朝陽','parent'=>7), array('id'=>7,'name'=>'北京','parent'=>0), array('id'=>8,'name'=>'上地','parent'=>2) );
#找父欄目、父父欄目#
function parenttree($arr,$id){ $par_arr = array(); //var_dump($id); while($id !== 0){//外層循環的作用:0表示最頂層的欄目 等於0就表示無父欄目/父父欄目 只要不等於0就表示有上級目錄 則循環 foreach($arr as $v){//內層循環的作用:遍歷數組查找出來$id對應的值 若找到了 該值就是它自身(第一次就是它自己)和父欄目/父父欄目..然后存入數組並終止循環(break) if($v['id'] == $id){ $par_arr[] = $v; $id = $v['parent']; break; } } } return $par_arr; }
#找子孫欄目#
function subtree($arr,$parent=0){ $task = array($parent);//創建任務表 $subs = array();//存子孫欄目的數組 while(!empty($task))//如果任務表不為空 就表示要做任務 { $flag = false;//默認沒找到子樹 foreach($arr as $k=>$v){ if($v['parent'] == $parent){ $subs [] = $v; array_push($task,$v['id']);//借助棧 把新的地區的id壓入棧 $parent = $v['id']; unset($arr[$k]);//把找到的單元unset掉 $flag = true; } } if(!$flag){//表示沒找到子樹 array_pop($task); $parent = end($task); } /*echo '<pre>'; print_r($task); echo '</pre>';*/ } return $subs; }