php+mysql查询实现无限下级分类树输出示例
php  /  管理员 发布于 7年前   174
本文实例讲述了php+mysql查询实现无限下级分类树输出。分享给大家供大家参考,具体如下: 这里介绍的php结合mysql查询无限下级树输出,其实就是无限分类。给各位整理了几个php无限分类的例子. 树输出: 这个是输出 Array 然后转让为 json 例子: 表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径,储存该分类祖先的集合,isdir判断是否是目录,1为是,0为否. 显示函数: 其中$this->sql对象为sql操作类对象,re_datas()函数返回查到的数组,sql_numrows()函数返回查询到的数目. 调用方法: 例子: 表:category id int 主键,自增 顶级分类的 pid 默认就是0了,当我们想取出某个分类的子分类树的时候,基本思路就是递归,当然,出于效率问题不建议每次递归都查询数据库,通常的做法是先讲所有分类取出来,保存到PHP数组里,再进行处理,最后还可以将结果缓存起来以提高下次请求的效率. 目标是将它转化为下面这种结构: 用数组来表示的话,可以增加一个 children 键来存储它的子分类: 处理过程: print_r($tree);打印结果如下: 优点:关系清楚,修改上下级关系简单. 缺点:使用PHP处理,如果分类数量庞大,效率也会降低. 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php面向对象程序设计入门教程》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。function get_array($user_id,$top=0){global $mysql,$_G; $sql = "select user_id as name from `{spreads_users}` where p1.spreads_userid='{$user_id}'";$rows= $mysql->db_fetch_arrays($sql); if($top==1){ $arr[0]['name']=$user_id; $arr[0]['children']=array(); } $top=$top+1;foreach ($rows as $key=>$value) { $r = get_array($value['name']); //调用函数,传入参数,继续查询下级 $arr[0]['children'][$key]['name']= $value['username']; //组合数组 if(is_array($r)){ $arr[0]['children'][$key]['children']= $r[0]['children']; } $i++; } return $arr; }$list = get_array("1000",1); //调用函数1000是顶级IDecho 'var data='.json_encode($list);
//$count为分类等级sort_list($str,$fatherid,$count){$rs = $this->sql->re_datas("select * from sort where father_id = fatherid");$num = $this->sql->sql_numrows();$i=0;$n = 1;while(isset($rs[$i])){$name = "";for($n = 1 ; $n < $count ; $n ){$name.="│ ";}if($i 1==$num){$name.="└─".$rs[$i][name];}else{$name.="├─".$rs[$i][name];}if($rs[$i][isdir]){$str.="".$name."";}else{$str.=$name";}$temp = $count 1;$str = $this->sort_list($str,$rs[$i][id],$temp);$i ;}return $str;}
$sort_list = sort_list($sort_list,0,1);
name varchar 分类名称
pid int 父类id,默认0
先来构建一个原始数组,这个直接从数据库中拉出来就行:$categories = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name'=>'手机','pid'=>0), array('id'=>3,'name'=>'笔记本','pid'=>1), array('id'=>4,'name'=>'台式机','pid'=>1), array('id'=>5,'name'=>'智能机','pid'=>2), array('id'=>6,'name'=>'功能机','pid'=>2), array('id'=>7,'name'=>'超级本','pid'=>3), array('id'=>8,'name'=>'游戏本','pid'=>3),);
电脑―笔记本――-超级本――-游戏本―台式机手机―智能机―功能机
array( //1对应id,方便直接读取 1 => array( 'id'=>1, 'name'=>'电脑', 'pid'=>0, children=>array( &array( 'id'=>3, 'name'=>'笔记本', 'pid'=>1, 'children'=>array( //此处省略 ) ), &array( 'id'=>4, 'name'=>'台式机', 'pid'=>1, 'children'=>array( //此处省略 ) ), ) ), //其他分类省略)
$tree = array();//第一步,将分类id作为数组key,并创建children单元foreach($categories as $category){ $tree[$category['id']] = $category; $tree[$category['id']]['children'] = array();}//第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。foreach ($tree as $k=>$item) { if ($item['pid'] != 0) { $tree[$item['pid']]['children'][] = &$tree[$k]; }}
Array( [1] => Array ( [id] => 1 [name] => 电脑 [pid] => 0 [children] => Array ( [0] => Array( [id] => 3 [name] => 笔记本 [pid] => 1 [children] => Array ( [0] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array() ) [1] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array() ) )) [1] => Array( [id] => 4 [name] => 台式机 [pid] => 1 [children] => Array ( )) ) ) [2] => Array ( [id] => 2 [name] => 手机 [pid] => 0 [children] => Array ( [0] => Array( [id] => 5 [name] => 智能机 [pid] => 2 [children] => Array ( )) [1] => Array( [id] => 6 [name] => 功能机 [pid] => 2 [children] => Array ( )) ) ) [3] => Array ( [id] => 3 [name] => 笔记本 [pid] => 1 [children] => Array ( [0] => Array( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( )) [1] => Array( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( )) ) ) [4] => Array ( [id] => 4 [name] => 台式机 [pid] => 1 [children] => Array ( ) ) [5] => Array ( [id] => 5 [name] => 智能机 [pid] => 2 [children] => Array ( ) ) [6] => Array ( [id] => 6 [name] => 功能机 [pid] => 2 [children] => Array ( ) ) [7] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [8] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ))
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号