当前位置:首页 > 技术教程 > 脚本编程 > 正文内容

超简单的php无限极分类,生成递归数组并输出树状图

atao4年前 (2020-10-24)脚本编程3390

什么是无限级分类?

无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了。其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类。分类无处不在,分类显得“无限”。我这里就不说无限分类的必要性了。

无限级分类原理简介

无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,id,pid。id用来标识自身,而pid则是用来表明父级id。也就是说,每个分类记录不仅描述了自身,还描述了与其关心最为紧密的另一个id。看似复杂的事情被这样一个小技巧解决了。

闲话不多说,该展现本文的实例了。

数据库

image.png

PHP分类显示页

<?php
//实例化数据库对象,类库请在本站搜索Mysql类
//注意把字段名换成和自己数据库一样的
$xsxb = new Mysql("127.0.0.1","root","root","xsxb","utf8");
function getList($pid=0,&$result=array(),$space=0){
    global $xsxb; //把数据库变量转为全局变量
    $space=$space+2;
    $sql="SELECT*FROM class WHERE pid = $pid"; //查询SQL语句
    $res = mysqli_query($xsxb->link,$sql);//这里要注意一下,$xsxb->link是我类调用的方法。
    while ($row = mysqli_fetch_assoc($res)){
        $row['name']=str_repeat('-',$space).$row['name'];//在每个文字前面加--
        $result[]=$row;
        getList($row['id'],$result,$space);
    }
    return $result;
}
$rs=getList();
function displayCate($pid=0,$selected=1){
    $rs=getList($pid);
    $str='';
    $str.="<select class='form-control' id='example-select' name='pid'>";
    $str.="<option value='0'>|一级分类</option>";
    foreach ($rs as $key=>$val){
        $str.="<option value='".$val['id']."'>|{$val['name']}</option>"; //输出option
    }
    return $str.='</select>';
}
echo displayCate(0,2); //输出下拉框
?>

image.png

把数据转为递归数组

//我把这两个函数和上面的函数放在一起了,所有用一个类库
//注意把字段名换成和自己数据库一样的
function get_str($id = 0) {
    global $xsxb;//把数据库变量转为全局变量
    global $str;
    $sql = "select id,name from class where pid=$id";
    $result = mysqli_query($xsxb->link,$sql);//查询pid的子类的分类
    if($result && mysqli_affected_rows($xsxb->link)){//如果有子类
        $str .= '<ul>';
        while ($row = mysqli_fetch_array($result)) { //循环记录集
            $str .= "<li>" . $row['id'] . "--" . $row['name'] . "</li>"; //构建字符串
            get_str($row['id']); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级
        }
        $str .= '</ul>';
    }
    return $str;
}
function get_array($id=0){
    global $xsxb; //把数据库变量转为全局变量
    $sql = "select id,name from class where pid= $id";
    $result = mysqli_query($xsxb->link,$sql);//查询子类
    $arr = array();
    if($result && mysqli_affected_rows($xsxb->link)){//如果有子类
        while($rows=mysqli_fetch_assoc($result)){ //循环记录集
            $rows['children'] = get_array($rows['id']); //调用函数,传入参数,继续查询下级
            $arr[] = $rows; //组合数组
        }
        return $arr;
    }
}
$list = get_array(0); //调用函数并赋给变量
echo json_encode($list); //把数据转为json格式,并输出
exit; //停止后面的程序

HTML页面通过AJAX调用JSON数据

<!-- 这个页是HTML页面,需要有结构,我就省略了! -->
<!-- 生成图片之前记得引JS、CSS文件、在上一篇文章中 -->
<div id="chart-container"></div>
<script>
   (function($){
     $(function() {
      $.get("active.php",{act:'frame'},function(data){ //通过AJAX调用active.php页面并且传了个act过去
            var list = JSON.parse(data); //把json数据转为数组
            var datascource = {
                'name': '类别整体构架图', //不能删
                'id': 'Frame diagram', //不能删
                'children': list
            };
            $('#chart-container').orgchart({ //特定用法
                'data' : datascource, //数据
                'pan':true, //允许鼠标拖动
                'zoom':true //允许滚轮放大缩小
            });
      });
     });
   })(jQuery)
</script>

image.png


欢迎有要补充新知识的小伙伴下方评论留言哦~~


扫描二维码推送至手机访问。

版权声明:本文由武景涛的博客发布,如需转载请注明出处。

本文链接:http://yizhanhongtu.cn/post/38.html

分享给朋友:

相关文章

php原生代码实现短信验证码注册业务,流程详解附demo

php原生代码实现短信验证码注册业务,流程详解附demo

业务流程:用户在前端输入手机号后发送验证码请求,并发送到php处理页。php处理页收到手机号,生成验证码并调用短信平台。短信平台采用API对接,并发送验证码用户收到验证码,并提交注册php处理页收到验...

php事务是什么,php原生事务的实现和mysql回滚操作

php事务是什么,php原生事务的实现和mysql回滚操作

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。PHP事务四大特性原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行。一致性(Consis...

PHP原生对接QQ互联/实现QQ登录,SDK2.1版本/超级详细!

PHP原生对接QQ互联/实现QQ登录,SDK2.1版本/超级详细!

在目前在大部分网站中都会接入QQ登录或者微信登录,目前QQ互联的接入门槛是比较低的,官方的前提是必须备案网站!!如果网站没有备案请某宝自行搜索一下其他方法。用QQ登录接口,首先要到QQ互联完善开发者认...

组织结构图OrgChart.js的简单使用,实现树状图结构

组织结构图OrgChart.js的简单使用,实现树状图结构

OrgChart.js是什么?基于ES6的组织结构图插件。特征支持本地数据和远程数据(JSON)。基于CSS3过渡的平滑扩展/折叠效果。将图表对齐为4个方向。允许用户通过拖放节点更改组织结构。允许用户...

php导出excel中数字会自动转换为科学计数法解决办法

php导出excel中数字会自动转换为科学计数法解决办法

原因:凡数字超过11位数,Excel 表格就会用科学记数法显示。如果要输入超过11位的数,得把单元格设为文本形式或在输入数字前先输入一个英文单引号(')或者加入制表符。数据导出不转换科学计数法...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。