php 无限极分类 递归查询 获取所有子类和父类

1、首先创建分类表 category
CREATE TABLE IF NOT EXISTS `category` (
  `categoryId` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `parentId` smallint(5) unsigned NOT NULL DEFAULT '0',
  `categoryName` varchar(50) NOT NULL,
  PRIMARY KEY (`categoryId`)

2、插入测试数据
 
INSERT INTO `category` (`categoryId`, `parentId`, `categoryName`) VALUES
(1, 0, 'php'),
(2, 0, 'java'),
(3, 0, 'c/c++'),
(4, 1, 'php基础'),
(5, 1, 'php开源资料'),
(6, 1, 'php框架'),
(7, 2, 'java Se'),
(8, 2, 'java EE'),
(9, 2, 'java Me'),
(10, 3, 'c/c++基础编程'),
(11, 3, 'c/c++系统开发'),
(12, 3, 'c嵌入式编程'),
(13, 3, 'c++应用开发'),
(14, 13, 'c++桌面应用开发'),
(15, 13, 'c++游戏开发');

3、通过父级找子级

3.1、找某一个父级的直接子集

function getSons($categorys,$catId=0){
    $sons= [];
    foreach($categorys as $item){
        if($item['parentId']==$catId)
            $sons[]=$item;
    }
    return $sons;
}

3.2、获取某个分类的所有子集

function getSubs($categorys,$catId=0,$level=1){
    $subs=array();
    foreach($categorys as $item){
        if($item['parentId']==$catId){
            $item['level']=$level;
            $subs[]=$item;
            $subs=array_merge($subs,getSubs($categorys,$item['categoryId'],$level+1));
            
        }
            
    }
    return $subs;
}

4、通过子级找父级

4.1、获取某一个子类的所有父级  递归

public function getParents($categorys,$parentId = '')
    {
        $tree = [];
        if($data){
            foreach ($categorysas $item){
                if($parentId != ''){
                    if($item['categoryId'] == $parentId){
                        $tree[] = $item;
                        $tree = array_merge($tree,$this->getAccordOe($data,$item['parentId']));
                    }
                }
            }
 
            return $tree;
        }
    }

4.2、获取某一个子类的所有父级  迭代

function getParents2($categorys,$catId){
    $tree=array();
    while($catId != 0){
        foreach($categorys as $item){
            if($item['categoryId']==$catId){
                $tree[]=$item;
                $catId=$item['parentId'];
                break;    
            }
        }
    }
    return $tree;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值