php 递归无限级分类原理和实现代码

php 递归无限级分类原理和实现代码

代码实例qingyu2020-09-18 18:29:231050A+A-

  递归无限级分类的原理:

  每一个分类都记录它的父级id,当为顶级分类时,父级id为0。这样无论哪个分类,都可以通过父级id一层一层去查明它的所有父级,以便清楚知道它所属何种分类,层级深度为几。

  对数据进行重组,在重组的过程中,根据其父子关系,将相应的类别摆放到正确的位置。

    /*无限极分类列表*/
public function getTree($data='',$cate_id=0)
{
   if(empty($data)){
      $data = $this->order('listorder')->field('id,parent_id,cate_name,listorder')->select()->toArray();
   }
   return $this->_reSort($data,$cate_id);
}
//无限极分类树状结构,修改level值
    /* @param $data 要遍历的分类数组
     * @param $parent_id 节点pid,默认为0,表示从顶级节点开始
     * @param $ret重组排序的所有后代节点
     * @param $cate_level 节点层级
     */
private function _reSort($data, $parent_id=0, $cate_level=0, $isClear=TRUE)
{
       //用于保存重组排序后的结果
   static $ret = array();
       //刚进入函数要清除上次调用此函数后留下的静态变量的值,进入深一层循环时则不要清除
   if($isClear)
      $ret = array();
   foreach ($data as $k => $v)
   {
      if($v['parent_id'] == $parent_id)
      {
         $v['cate_level'] = $cate_level;
         //找到以$parent_id为父节点的子节点,将其保存
         $ret[] = $v;
         unset($data[$k]);
         //然后以该节点为父节点,继续找后台节点
         $this->_reSort($data, $v['id'], $cate_level+1, FALSE);
      }
   }
   return $ret;
}

  调用

class Category extends Base
{
    public function index()
    {
        $category_model = new Categorys();
        $categoryTree = $category_model->getTree();

        return view('',[
            'categoryTree' =>$categoryTree,
            'left_menu' => 1,
        ]);
    }
}

php 递归无限级分类原理和实现代码

点击这里复制本文地址 欢迎来到大黄鸡源码分享网
qrcode

大黄鸡源码编程网 © All Rights Reserved.  
网站备案号:闽ICP备18012015号-4
Powered by Z-BlogPHP
联系我们| 关于我们| 广告联系| 网站管理