2019独角兽企业重金招聘Python工程师标准>>>

在开发中经常需要用到树形数据,比如无限多级分类,就是典型的树形结构。这里面的算法,用到了递归思想,为了简化开发过程,我编写了一个工具来提升开发效率,

它就是PHPTree。

git地址:https://git.oschina.net/jiusem/PHPTree.git

最简单的例子:

<?php
require('PHPTree.class.php');//原始数据, 从数据库读出
$data = array(array('id'=>1,'name'=>'book','parent_id'=>0),array('id'=>2,'name'=>'music','parent_id'=>0),array('id'=>3,'name'=>'book1','parent_id'=>1),array('id'=>4,'name'=>'book2','parent_id'=>3)
);$r = PHPTree::makeTree($data);
echo json_encode($r);?>

输出:

 [{"id": 1,"name": "book","parent_id": 0,"expanded": false, //不展开子节点"children": [{"id": 3,"name": "book1","parent_id": 1,"expanded": false,"children": [{"id": 4,"name": "book2","parent_id": 3,"leaf": true}]}]},{"id": 2,"name": "music","parent_id": 0,"leaf": true}
]

生成的数据就是树形结构了,可以结合ExtJS等前端框架来使用了。git中包含了一个ExtJS的demo,大家可以参考。

演示:

如果不需要使用前端框架,只是用HTML输出,可以使用下面的方法:

$r = PHPTree::makeTreeForHtml($data);

得到一个一维数组,用 level 字段来标识分类的层次:

array(array('id'=>1,'name'=>'用户管理','parent_id'=>0,'level'=>0 //一级分类),array('id'=>1,'name'=>'用户列表','parent_id'=>1,'level'=>1 //二级分类)....
);

输出为select标签:

echo '<h1>PHPTree树形结构</h1>';
echo '<select  style="width:300px;">';
foreach($r as $item){echo '<option>';//根据所在的层次缩进echo str_repeat('......',$item['level']);echo $item['name'];echo '</option>';
}
echo '</select>';

演示:

git中包含了一个输出HTML的demo,大家可以参考。

关于数据库的设计,只需要保证包含 id 和 parent_id 字段即可,其他字段可以自行添加,不会影响数据生成。parent_id是父级ID,如果是一级分类,就设为 0 。当然,字段也是可以配置的。请继续往下看,我将介绍一些进阶的使用方法。

展开子节点:

PHPTree::makeTree( $data, array('expanded' => true
));

输出的数据为:

[{id:1,name:'book1',expanded:true,//展开子节点children:[...]}
]

自定义主键和父键:

//数据库读出
$data = array(array('order_id'=>1, //主键'name'=>'book1','pid'=>0, //父键...)
);
PHPTree::makeTree( $data, array('primary_key' => 'order_id','parent_key'  => 'pid'
));

输出的数据为:

[{order_id:1,name:'book1',pid:0,...}
]

makeTreeForHtml 方法也支持配置主键和父键。

还有其他字段也可以自定义,但下面这些参数仅支持 makeTree 方法:

$r = PHPTree::makeTree($data, array('expanded_key' => 'expanded','children_key' => 'children','leaf_key'     => 'leaf'
));

默认,这些字段的配置都是以ExtJS为参考的,如果你使用zTree框架的话,这些字段就需要重新配置了。

zTree 是一款强大的国产树形框架,它还支持 简单JSON格式,是一维数据格式,实际上就不需要用到PHPTree了。当然,PHPTree输出的数据层次感清晰,zTree也是支持的。

转载于:https://my.oschina.net/crazymus/blog/491174

PHPTree——快速生成无限多级分类相关推荐

  1. php无限分级快速,PHPTree——php快速生成无限级分类_php技巧

    在开发中经常需要用到树形数据,比如无限多级分类,就是典型的树形结构.这里面的算法,用到了递归思想,为了简化开发过程,我编写了一个工具来提升开发效率,需要的朋友可以参考下 它就是PHPTree. git ...

  2. php根据分类生成网址,PHP实现无限极分类生成分类树的方法

    本文实例讲述了PHP实现无限极分类生成分类树的方法.分享给大家供大家参考,具体如下: 现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出 ...

  3. tp6中无限极分类里面的获取多级分类数据

    作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 文章目录 前言 一.什么是多级分类数据? 二.使用步骤 sql 代码 2.效果图 总结 前言 和大家共同完成获取多级分类数据 ...

  4. linux dd 截文件,Linux使用dd命令快速生成大文件(转)

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  5. 无限级分类 php_php无限极分类的方法是什么

    今天给大家带来的是php的无限极分类技术,本人把无限极分类划分为两种.具体方法如下: 首先我把数据库表给大家看看,数据库是tasks,数据库表也是tasks. 相关推荐:<PHP教程> 第 ...

  6. php实现栏目三种类型,WordPress后台edit-tags.php里无限栏目分类实现

    在 WordPress 里 http://localhost/wordpress3.6.1/wp-admin/edit-tags.php?taxonomy=category 这个链接可以显示 WP 里 ...

  7. java递归查询无限极分类_sqlserver实现树形结构递归查询(无限极分类)的方法

    SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE ...

  8. 无限极分类php简单,创建无限极分类树型结构的简单方法

    先上效果图 顶级分类其实就是一级分类,二级分类也叫作一级分类的子分类,在这个基础上,子分类还可以拥有子分类,这样就构成了无限极分类. 接下来看具体实现的代码: 一.在控制器中按字段查询,查询出所有分类 ...

  9. Python快速生成注释文档

    Python为我们生成基本满足的说明文档,一来可以提高代码整体阅读性,二来可以将代码的整体结构看着也更清晰. 注意:注释的地方和函数名类名都是与__all__内相关联的 简单的代码格式: #!/usr ...

最新文章

  1. jQuery学习(一)
  2. iPhone磁盘空间/剩余空间代码
  3. python编写函数求n阶调和数_Python实现调和级数的计算
  4. Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler
  5. 两个八进制小数怎么相加_两个十六进制怎么相加的
  6. 【计算机网络】——初识计算机网络
  7. spring_restful_json_jdbc
  8. 最新最全git使用大全
  9. E大调第一个指型_初学吉他大调与对应小调的知识,看完这个就懂了
  10. 服务器如何连接多屏显示器,电脑设置两个显示器多屏显示
  11. JAVA基础---函数式接口、Stream流
  12. 2015年底学习汇总报告
  13. P12证书转BKS证书
  14. office2007无法使用宏的解决方法
  15. html分列代码,实现分列的两段excel vba 分列代码
  16. 如何使 SAP UI5 SmartField 在运行时渲染成超链接的形式并支持跳转的试读版
  17. 简单工厂—工厂方法—抽象工厂
  18. 17-kubernetes集群中ceph集群使用
  19. 2014 ACM亚洲区域赛 - 北京现场赛
  20. The ACM Publishing System (TAPS) ACM出版系统上传文章 操作流程

热门文章

  1. Struts2用户输入验证(6)
  2. margin和padding
  3. Chrome之排序问题
  4. 【阅读笔记】Thinking in Java 对象入门
  5. linux获取后台进程的控制台数据
  6. 雅虎书面问题——最大的问题汇总
  7. 算符优先文法,中缀式求值,栈的典型应用
  8. [CSAPP笔记][第一章计算机系统漫游]
  9. Dom4j和Xpath(转)
  10. Linux-profile、bashrc、bash_profile之间的区别和联系