Home  >  Article  >  Backend Development  >  Implement unlimited classification in PHP

Implement unlimited classification in PHP

不言
不言Original
2018-04-27 16:15:571390browse

The content of this article is about practical infinite classification in PHP. It has certain reference value. Now I share it with you. Friends in need can refer to it.

In our work, infinite classification There are many applications. In fact, the idea is not difficult. It is just a matter of using recursive thinking to call yourself. Let’s take a look at the infinite classification function I wrote:

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

I hope everyone will leave valuable comments to improve and enrich my blog. Welcome to exchange and learn.

Related recommendations:

PHP Infinitus Classification

How to create an Infinitus classification tree structure

php implements infinite classification tree without recursion

The above is the detailed content of Implement unlimited classification in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn