实用的无限级分类

xiaoxiao2021-02-28  108

在我们工作中,无限级分类应用非常多,其实其思想并不难,无非运用递归思想自己调用自己罢了。下面就来看看我写的无限级分类函数:

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;

}

希望大家留下宝贵的意见,来完善和丰富我的博客,欢迎交流学习。

转载请注明原文地址: https://www.6miu.com/read-24882.html

最新回复(0)