ThinkPHP无限分类

根据id,pid怎么进行无限分类

图片描述

阅读 4.5k
5 个回答
public function gettree($items, $parent_id = 'parent_id', $id = 'id'){
    $tree = array(); //格式化好的树
    if(empty($items)){
        return $tree;
    }
    foreach ($items as $item){
        if (isset($items[$item[$parent_id]])){
            $items[$item[$parent_id]]['son'][] = &$items[$item[$id]];
        }else{
            $tree[] = &$items[$item[$id]];
        }
    }
    return $tree;

}

使用遞歸函數,不過我寫這種方法空間複雜度沒有得到優化,忘記以前的寫法了

private function getTreeList($data, $pid = 0)
    {
        $resultarr = array();
        foreach ($data as $teamdata) {
            if ($teamdata['pid'] == $pid) {
                $team_data = $teamdata;
                $children_data = $this->getTreeList($data, $teamdata['id']);
                $team_data['children'] = $children_data;
                $resultarr[] = $team_data;
            }
        }
        return $resultarr;
    }

用递归来循环出一个数组

我写个了菜单排序的

1.数据表

clipboard.png

2.控制器

//菜单列表
    public function menu(){
        $menu = M('menu');
        $data = $menu -> order('oid') ->select();
            //递归排序
        $data = node_merge($data);
        $this->assign('v',$data);
           $this->display();
    }

3.递归方法

 //无限分类(递归函数)
         function node_merge($node,$pid=0){
                $arr = array();
                foreach ($node as $v){
                    if($v['pid']==$pid){
                        $v['child']=node_merge($node,$v['id']);
                        $arr[]=$v;
                    }
                }
                return $arr;

         }
function getcate2($pid=0,$level=0){
    $level++;
    $pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root','root');
    //第一次pid为0 的时候查的是根分类
    $stmt = $pdo->query("select * from cate2 where pid={$pid}");
    $data = $stmt->fetchAll(2);

    foreach($data as $v){
        echo str_repeat('|&nbsp;',$level).'|-'.$v['name'].$v['id'].'<br />';
        
        //把第一个根分类的id传到下一次 
        //下一次查询二级分类
        getcate2($v['id'],$level);
    }
}
getcate2();

更多分类方法请,里面还带表及测试数据 无限分类之无限方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题