PHP-無限級分類(迭代法創建)



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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM