实用的无限级分类

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

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;

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值