首頁  >  文章  >  後端開發  >  PHP中實作無限級分類

PHP中實作無限級分類

不言
不言原創
2018-04-27 16:15:571365瀏覽

這篇文章介紹的內容是關於PHP中實用無限級分類,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

在我們工作中,無限級分類應用非常多,其實其思想並不難,無非運用遞歸思想自己調用自己罷了。下面就來看看我寫的無限級分類函數:

header("content-type:text/html;charset=utf-8");//测试数组
$arr=array(    
array('id'=>2,'name'=>'分类2','parent_id'=>1),    
array('id'=>9,'name'=>'分类9','parent_id'=>8),    
array('id'=>1,'name'=>'分类1','parent_id'=>0),    
array('id'=>7,'name'=>'分类7','parent_id'=>0),    
array('id'=>3,'name'=>'分类3','parent_id'=>2),    
array('id'=>4,'name'=>'分类4','parent_id'=>0),    
array('id'=>6,'name'=>'分类6','parent_id'=>5),    
array('id'=>8,'name'=>'分类8','parent_id'=>7),    
array('id'=>5,'name'=>'分类5','parent_id'=>4)
);/**

 * 已知子类id 得到父类树形结构
 * @param  [type]  $data    [要查询的数组]
 * @param  [type]  $id      [子类id]
 * @param  integer $level   [缩进系数]
 * @param  boolean $isClear [调用时为true,多次调用不相互叠加]
 * @return [type]           [返回结果树形结构]
 */function getParent($data,$id,$level=0,$is_Clear=false){

    static $_rec = array();    if ($is_Clear == true) {        $_rec = array();
    }    foreach ($data as $k=>$v) {        if ( $v['id'] == $id) {        $_rec[] =$v;  
                // if ($v['parent_id'] != 0) {
                getParent($data,$v['parent_id']);         // }
        }
    }     $rec = array_reverse($_rec);     for ($i=0; $i
     $rec[$i]['level']=$level;     $level++;
     }     //把自己拿出来,自己不属于父类
     array_pop($rec);     return $rec;
}/**
 * 已知父类id找  得到子类树形结构
 * @param  [type]  $data    [要查询的数组]
 * @param  [type]  $id      [父类id]
 * @param  integer $level   [缩进系数]
 * @param  boolean $isClear [调用时为true,多次调用不相互叠加]
 * @return [type]           [返回结果树形结构]
 */function getChilds($data,$id,$level=0,$isClear=false){
    static $rec = [];    if ($isClear == true) {        $rec =[];
    }    foreach ($data as $k => $v) {        if ($v['parent_id'] == $id) {            $v['level']=$level;            $rec[] =$v;
            getChilds($data,$v['id'],++$level);
        }
    }    return $rec;

}/**
 * 已知父类id,得到子类id树形结构;区别在于$row[]=$v['id'],只赋值id;
 * getParent(),可改写成getParentid();
 * @param  [type]  $data [description]
 * @param  [type]  $id   [description]
 * @param  boolean $col  [description]
 * @return [type]        [description]
 */

   function getChildsId($data,$id,$col=false){
       static $row=array();       if($col)           $row=array();           foreach ($data as $k => $v) {               if($v['parent_id'] ==$id){                   $row[]=$v['id'];
                   getChildsId($data,$v['id']);
               }
           }       return $row;
   }/**
 * 已知父类id,得到树形结构;
 * 结合getParent(),若不弹出自己,即已知子类id,得到树形结构
 * @param  [type]  $data      [description]
 * @param  [type]  $parent_id [description]
 * @param  integer $level     [description]
 * @param  boolean $col       [description]
 * @return [type]             [description]
 */function tree($data,$parent_id,$level=0,$col=false){
    static $res=array();        if($col) $res=array();    foreach ($data as $k => $v) {        
    if($v['parent_id'] == $parent_id){      
          $v['level']=$level;            
          $res[]=$v;
            tree($data,$v['id'],$level+1);
        }
    }     return $res;
}

希望大家留下寶貴的意見,來完善和豐富我的博客,歡迎交流學習。

相關推薦:

PHP無限極分類

#如何建立無限極分類樹型結構

php無需遞歸實作無限極分類樹

以上是PHP中實作無限級分類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn