php无限分类根据顶类获取所有子类
来源:互联网 发布:淘宝客不显示佣金 编辑:程序博客网 时间:2024/06/07 09:31
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`)) ;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++游戏开发');
*///获取某分类的直接子分类function getSons($categorys,$catId=0){$sons=array();foreach($categorys as $item){if($item['parentId']==$catId)$sons[]=$item;}return $sons;}//获取某个分类的所有子分类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;}//获取某个分类的所有父分类//方法一,递归function getParents($categorys,$catId){$tree=array();foreach($categorys as $item){if($item['categoryId']==$catId){if($item['parentId']>0)$tree=array_merge($tree,getParents($categorys,$item['parentId']));$tree[]=$item;break;}}return $tree;}//方法二,迭代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;}//测试 部分$pdo=new PDO('mysql:host=localhost;dbname=test','root','8888');$stmt=$pdo->query("select * from category order by categoryId");$categorys=$stmt->fetchAll(PDO::FETCH_ASSOC);$result=getSons($categorys,1);foreach($result as $item)echo $item['categoryName'].'<br>';echo '<hr>';$result=getSubs($categorys,0);foreach($result as $item)echo str_repeat(' ',$item['level']).$item['categoryName'].'<br>';echo '<hr>';$result=getParents($categorys,7);foreach($result as $item)echo $item['categoryName'].' >> ';echo '<hr>';$result=getParents2($categorys,15);foreach($result as $item)echo $item['categoryName'].' >> ';?>
$category_list = array(array('id'=>1, 'name'=>'1级分类 1', 'pid'=>0),array('id'=>2, 'name'=>'1级分类 2', 'pid'=>0),array('id'=>3, 'name'=>'1级分类 3', 'pid'=>0),array('id'=>4, 'name'=>'2级分类 1', 'pid'=>1),array('id'=>5, 'name'=>'2级分类 2', 'pid'=>2),array('id'=>6, 'name'=>'3级分类 1', 'pid'=>4),array('id'=>7, 'name'=>'3级分类 2', 'pid'=>5),array('id'=>8, 'name'=>'4级分类 1', 'pid'=>6),array('id'=>9, 'name'=>'3级分类 2', 'pid'=>5),);$son_list = getSubs($category_list, 2);function getSubs($categorys,$catId=0,$level=1){ $subs=array(); foreach($categorys as $item){ if($item['pid']==$catId){ $item['level']=$level; $subs[]=$item; $subs=array_merge($subs,getSubs($categorys,$item['id'],$level+1)); } } /*print_r结果:先进后出(2-》5-》7、9)array_merge(array(5), array(7,9)) 4getSubs()得到array(7,9) 3array_merge(array(7), array()) 1array_merge(array(7,9), array()) 2*/print_r($subs); return $subs; }
例子:
$category_list = array(array('id'=>1, 'name'=>'1级分类 1', 'pid'=>0),array('id'=>2, 'name'=>'1级分类 2', 'pid'=>0),array('id'=>3, 'name'=>'1级分类 3', 'pid'=>0),array('id'=>4, 'name'=>'2级分类 1', 'pid'=>1),array('id'=>5, 'name'=>'2级分类 2', 'pid'=>2),array('id'=>6, 'name'=>'3级分类 1', 'pid'=>4),array('id'=>7, 'name'=>'3级分类 2', 'pid'=>5),array('id'=>8, 'name'=>'4级分类 1', 'pid'=>6),array('id'=>9, 'name'=>'3级分类 2', 'pid'=>5),);$a = getSonx(1, $category_list);//print_r($a);exit;function getSonx($id, $data){$returnData = array();foreach($data as $k=>$v){if($v['pid'] == $id){$returnData[]= $v;$a= getSonx($v['id'], $data);if($a){print_r($a);$returnData= array_merge($returnData, $a);}//从最底层数据,向上合并。//for pid=5层,id:7,9是最底层了,getSonx()返回的是2个空array因为(没有子类)//结果:$returnData = array(7,9); 即$returnData[];//for pid=2层,id:5 合并刚才的7,9 $returnData = array(7,9);//结果:$returnData = array(5,7,9);}}return $returnData;}exit;
http://blog.csdn.net/kankan231/article/details/8462349
0 0
- php无限分类根据顶类获取所有子类
- php 无限递归查询子id 子类 根据父分类 父ID 查询所有子分类 子ID
- PHP根据大分类查询所有子类文章包括自身
- php获取分类下面的所有子类方法
- SQL Function(无限级分类根据ID获取其所有下属类别ID)
- mysql中从子类ID查询所有父类(做无限分类经常用到)
- php递归无限级分类【先序遍历算】,获取任意节点下所有子孩子
- php递归无限级分类【先序遍历算】,获取任意节点下所有子孩子
- mysql 根据子分类获取所有父类
- Asp.net树形产品结构菜单,根据产品分类获取产品及其子类的所有产品和数量统计
- php按层数获取无限极分类
- PHP获取淘宝所有分类
- PHP无限分类(树形类)
- PHP无限分类(树形类)
- PHP无限分类类库
- mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到)
- 获取类的所有子类
- 根据父类获取同一个包(包括子包)下所有子类
- [Spark源码剖析] DAGScheduler划分stage
- Failed to initialize the PowerShell host 解决方案
- 实现点击AlertDialog上按钮时不关闭对话框
- hibernate3-二级缓存配制 EHCache实战
- 10个学习Android开发的网站推荐
- php无限分类根据顶类获取所有子类
- 阿里云盘亚马逊云盘的区别特性一览表
- 系统调用fcntl 和 ioctl
- 天声人語 20150805
- 奇葩错误
- 日经春秋 20150805
- SAPUI5 table getRows方法
- 南邮 OJ 1190 约瑟夫问题
- I2C总线