php不使用递归实现无限极分类
无限极分类常用的是递归,但是比较不好理解,其实可以用数据库path,pid两个字段的设计来实现无限分类的功能
1、数据库设计
通过上图可以看出pid就是该栏目的父id,而path = 父path+pid;
2、php实现《树形查询》《逆向查询》以及给定栏目id《查询下一级》的方法:
$mysql = new MySQLi('localhost','root','','test');
$mysql->query("set names gb2312");
/**
* 获取无限分类列表(树形查询) 主要用于后台的栏目列表
*/
$sql = 'select ac_name,concat(path,"-",ac_id) as bpath from article_class order by bpath,ac_id';
$result = $mysql->query($sql);
while($row = $result->fetch_assoc()){
echo $row['ac_name'].'<br />';
}
echo '<hr />';
/**
* 指定分类获取全部的父类(逆向查询) 主要用于编辑文章时获取该文章的相关分类
*/
$ac_id = 10;
$sqlonly = 'select * from article_class where ac_id='.$ac_id;
$resultonly = $mysql->query($sqlonly);
$pclass = array();
$curclass = '';
while ($rowonly = $resultonly->fetch_assoc()){
$curclass = $rowonly['ac_name'];
$arrpaht = explode('-',$rowonly['path']);
$arrpaht = implode(',',$arrpaht); $sqlall = 'select * from article_class where ac_id in ('.$arrpaht.') order by ac_id'; $resultall = $mysql->query($sqlall);
while($rowall = $resultall->fetch_assoc()){
$pclass[] = $rowall['ac_name'];
}
}
array_push($pclass,$curclass);
echo '<pre>';
print_r($pclass);
echo '</pre>';
echo '<hr />';
/**
* 指定分类获取下一级分类 主要用于展开分类时显示下一级分类使用
*/
function getNextClass($ac_id){
global $mysql;
$sql = 'select * from article_class where pid='.$ac_id;
$resultnext = $mysql->query($sql);
while($rownext = $resultnext->fetch_assoc()){
echo $rownext['ac_name'].'<br />';
}
}
getNextClass(1);
3、相应的页面效果如下:
php不使用递归实现无限极分类的更多相关文章
- python 1 默写用递归实现无限极分类 2 默写用树实现无限极分类
data=[ {"cat_id":3,"name":"沙河","parent_id":1}, {"cat_id ...
- java递归、js递归,无限极分类菜单表
java-json import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.List; ...
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- PHP无限极分类生成树方法,无限分级
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
- PHP无限极分类生成树方法
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,整理分享了. function genera ...
- 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
- php无限极分类递归与普通
1. 递归 public function getInfo(){$data=$this->select();$arr=$this->noLimit($data,$f_id=0,$level ...
- Think PHP递归重新排序无限极子分类数组(递归无限极分类)
Think PHP递归重新排序无限极子分类数组 // 递归重新排序无限极子分类数组 function recursive($array,$pid=0,$level=0){ $arr = array() ...
随机推荐
- Android调起地图导航
想要使用导航功能可以使用各个地图的开放平台集成导航模块,如果不想集成也可以调起相关app导航 调起其他app首先得使用到该app包名,先贴出来 public final static Strin ...
- Codeforces Gym - 101147J Whistle's New Car
Discription Statements Whistle has bought a new car, which has an infinite fuel tank capacity. He di ...
- 邁向IT專家成功之路的三十則鐵律 鐵律十三:IT人理財之道-知足
身為一位專業的IT人士,工作上不僅要做到滿足興趣與專業熱忱,當然也要做到能夠滿足荷包.現代人賺錢不是問題,但花錢卻出了很大問題,親愛的IT朋友們,請不要將您辛苦賺來的錢花在想要的東西上,實際上需要的卻 ...
- 3D空间中射线与轴向包围盒AABB的交叉检测算法 【转】
http://blog.csdn.net/i_dovelemon/article/details/38342739 引言 在上一节中,我讲述了如何实现射线与三角形的交叉检测算法. 但是,我们应该知道, ...
- Git学习0基础篇(下)
server上的 Git - 协议 Git能够使用四种基本的协议传输资料:本地协议(Local).HTTP 协议.SSH(Secure Shell) 协议以及 Git 协议.眼下使用最普及的是 SSH ...
- win10拷贝文件卡顿的问题-竟然是winrar搞的
win10拷贝文件卡顿的问题-竟然是winrar搞的 学习了: http://www.w10zj.com/Win10xy/Win10xf_3378.html 没想到你竟然是这样的WinRAR 去除了s ...
- [Algorithms] Queue & Priority Queue
In this lesson, you will learn how to create a queue in JavaScript. A queue is a first-in, first-out ...
- C#如何生成release版本的程序,生成debug版本的程序
除了右击项目在生成中配置改成Release还要在顶部切换成Release
- HashSet中存方用户自己定义数据类型数据,重写equals方法和hashCode方法
import java.util.Set; import java.util.HashSet; public class SetTest { public static void main(Strin ...
- 转:Hadoop和Spark的异同
转自:http://www.techweb.com.cn/network/system/2016-01-25/2267414.shtml 谈到大数据,相信大家对Hadoop和Apache Spark这 ...