php无限分级快速,PHPTree——php快速生成无限级分类_php技巧
在开发中经常需要用到树形数据,比如无限多级分类,就是典型的树形结构。这里面的算法,用到了递归思想,为了简化开发过程,我编写了一个工具来提升开发效率,需要的朋友可以参考下
它就是PHPTree。
git地址:https://git.oschina.net/jiusem/PHPTree.git
或从脚本之家下载 http://www.jb51.net/codes/606002.html
最简单的例子:
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 '
PHPTree树形结构
';
echo '';
foreach($r as $item){
echo '';
//根据所在的层次缩进
echo str_repeat('......',$item['level']);
echo $item['name'];
echo '';
}
echo '';
演示:
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也是支持的。
相关推荐:
php无限分级快速,PHPTree——php快速生成无限级分类_php技巧相关推荐
- Stark 组件:快速开发神器 —— 自动生成 URL
说道 Stark 你是不是不会想到他--Tony Stark,超级英雄钢铁侠,这也是我的偶像. 不过我们今天要开发的 Stark 组件,倒是跟他的人工智能助手 JARVIS 有些类似,是帮助我们快速开 ...
- python全局键盘监听(pynput快捷键);利用pywin32快速截屏并生成视频
python全局键盘监听(pynput快捷键):利用pywin32快速截屏并生成视频 第一次在CSDN写博客,有点小紧张(/ω\) 以下内容完全个人理解,有错误请指出~ 最近在用python做一个小工 ...
- 无限纷争服务器几天更新,无限纷争死神觉醒怎么快速升级 新手快速升级方法攻略...
类型:动作射击大小:546M语言:中文 评分:10.0 标签: 立即下载 无限纷争死神觉醒前期等级永远是第一战斗力,提升等级可以解锁技能和玩法,加速游戏的发展,那么无限纷争死神觉醒怎么快速升级,下面带 ...
- Eclipse和IDEA中 xml快速注释和快速生成注释那个符号 !-- --
1.快速注释和快速取消一行或者多行: 方法:先选中内容,再同时按住 Ctrl + / 2.快速生成一个注释符号 : 方法:同时按住Ctrl + /,是在空白处按 3.注释掉选中内容(不是注释整行) 方 ...
- html左侧分级导航,jquery实现无限分级横向导航菜单的方法
本文实例讲述了jquery实现无限分级横向导航菜单的方法.分享给大家供大家参考.具体实现方法如下: 1. jquery插件版本代码如下: (function($){ $.fn.extend({ dro ...
- 快速卷积与快速相关——MATLAB
一.实验目的 1.学会FFT算法程序(或函数)的使用方法; 2.了解序列的线性卷积和圆周卷积之间的关系; 3.验证有限长FFT算法实现线性相关运算的快速计算方法; 4.解FFT的点数对快速卷积与快速相 ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 快速开发平台快速开发程序
快速开发平台快速开发程序 1.数据字典如下图: 2.界面设计器代码如下 1 <object name="" assembly="System.Windows.For ...
- r dataframe 转成向量_快速掌握R语言中类SQL数据库操作技巧
在数据分析中,往往会遇到各种复杂的数据处理操作:分组.排序.过滤.转置.填充.移动.合并.分裂.去重.找重.填充等操作.这时候R语言就是一个很好的选择:R可以高效地.优雅地解决数据处理操作.(本章节为 ...
最新文章
- Java输入输出(io)流详解、图解
- Delphi 调用C#编写的WebService
- PHP常用算法和数据结构示例(必看篇)
- 结构化数据存储,如何设计才能满足需求?
- TensorFlow 2.0 快速入门指南 | iBooker·ApacheCN
- Spring(6)---自动装配Beans
- Android 网络HTML查看器
- Http Handler 介绍
- python语言程序设计教程赵璐电子版_python语言程序设计教程 赵璐pdf 相关实例(示例源码)下载 - 好例子网...
- xhEditor富文本编辑器的使用说明
- LeetCode刷题-反转字符串中的元音字母
- The type initializer for ‘Gdip‘ threw an exception
- 赵小楼《天道》《遥远的救世主》深度解析(39)芮小丹的恋爱态度:敞亮
- 股东转让股权的条件是什么
- 如果遇到压力面试应该怎么办?应对压力面试有什么技巧?
- 大规模分布式与并行数据库架构
- Jetson Nano通过笔记本实现网络连接
- 金雅拓推出两项全新的身份证件安全增强功能
- 编写一个带有main函数的类,调用上面的汽车类,实例化奔驰、大众、丰田等不同品牌和型号,模拟开车过程:启动、加速、转弯、刹车、息火,实时显示速度。...
- Windows电脑桌面透明云便签怎么自定义设置便签快捷键?
热门文章
- ICPC程序设计题解书籍系列之五:吴永辉:《数据结构编程实验》(第2版)
- CCF NOI1067 最匹配的矩阵
- Batch Normalization 反向传播(backpropagation )公式的推导
- 熵的理解(玻尔兹曼分布)
- Spark —— RDD、DataFrame 与 Dataset
- Python Tricks(八)—— 斐波那契数列的另类实现
- Spark standalone 模式下的集群部署
- 三局两胜还是五局三胜?
- tomcat报错无法启动组件_微软正在修复Windows Server无法启动的0xc0000001报错故障
- micropython和python区别-什么是MicroPython?