php layui树形实现,树形菜单文档 - layui.tree-示例
/**
* Created by 小雨在线.
* User: 飛天
* Date: 2017/8/19 0019
* Time: 16:04
*/
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);
*/
define("HOST", "aaaa"); //主机名
define("USER", "bbbb"); //账号
define("PASS", "ccccc"); //密码
define("DBNAME", "ddd-database"); //数据库名
$conn = new mysqli(HOST, USER, PASS);
$conn->select_db(DBNAME);
$sql = "SELECT catename AS name,id,pid AS pId,cateorder FROM wuxianfenlei_deepcate ORDER BY id DESC";
$result = $conn->query($sql);
$data1 = [];
while ($row = $result->fetch_assoc()) {
$data1[] = $row;
}
//echo json_encode($data1);
$r = PHPTree::makeTree($data1, array(
'primary_key' => 'id',
'parent_key' => 'pId'
));
echo json_encode($r);
/**
* @name PHPTree
* @author crazymus < QQ:291445576 >
* @des PHP生成树形结构,无限多级分类
* @version 1.2.0
* @Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
* @updated 2015-08-26
*/
class PHPTree
{
protected static $config = array(
/* 主键 */
'primary_key' => 'id',
/* 父键 */
'parent_key' => 'parent_id',
/* 展开属性 */
'expanded_key' => 'expanded',
/* 叶子节点属性 */
'leaf_key' => 'leaf',
/* 孩子节点属性 */
'children_key' => 'children',
/* 是否展开子节点 */
'expanded' => false
);
/* 结果集 */
protected static $result = array();
/* 层次暂存 */
protected static $level = array();
/**
* @name 生成树形结构
* @param array 二维数组
* @return mixed 多维数组
*/
public static function makeTree($data, $options = array())
{
$dataset = self::buildData($data, $options);
$r = self::makeTreeCore(0, $dataset, 'normal');
return $r;
}
/* 生成线性结构, 便于HTML输出, 参数同上 */
public static function makeTreeForHtml($data, $options = array())
{
$dataset = self::buildData($data, $options);
$r = self::makeTreeCore(0, $dataset, 'linear');
return $r;
}
/* 格式化数据, 私有方法 */
private static function buildData($data, $options)
{
$config = array_merge(self::$config, $options);
self::$config = $config;
extract($config);
$r = array();
foreach ($data as $item) {
/** @var TYPE_NAME $primary_key */
$id = $item[$primary_key];
/** @var TYPE_NAME $parent_key */
$parent_id = $item[$parent_key];
$r[$parent_id][$id] = $item;
}
return $r;
}
/* 生成树核心, 私有方法 */
private static function makeTreeCore($index, $data, $type = 'linear')
{
extract(self::$config);
foreach ($data[$index] as $id => $item) {
if ($type == 'normal') {
if (isset($data[$id])) {
/** @var TYPE_NAME $expanded_key */
$item[$expanded_key] = self::$config['expanded'];
/** @var TYPE_NAME $children_key */
$item[$children_key] = self::makeTreeCore($id, $data, $type);
} else {
/** @var TYPE_NAME $leaf_key */
$item[$leaf_key] = true;
}
$r[] = $item;
} else if ($type == 'linear') {
/** @var TYPE_NAME $parent_key */
$parent_id = $item[$parent_key];
self::$level[$id] = $index == 0 ? 0 : self::$level[$parent_id] + 1;
$item['level'] = self::$level[$id];
self::$result[] = $item;
if (isset($data[$id])) {
self::makeTreeCore($id, $data, $type);
}
$r = self::$result;
}
}
return $r;
}
}
?>
效果:
参考资料:
http://www.layui.com/doc/modules/tree.html
https://my.oschina.net/crazymus/blog/491174
http://git.oschina.net/jiusem/PHPTree
php layui树形实现,树形菜单文档 - layui.tree-示例相关推荐
- layer之弹层组件文档 layui.layer(v.1.9.0之后)
弹层组件文档 - layui.layer layer 至今仍作为 layui 的代表作,她的受众广泛并非偶然,而是这数年来的坚持.不弃的执念,将那些不屑的眼光转化为应得的尊重,不断完善和维护.不断建设 ...
- boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例
boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例 实现功能 C++实现代码 实现功能 bo ...
- 14天学会安卓开发(附PDF文档和全部示例代码)
前言: 本人也是菜鸟,老鸟看了此文有哪里不好之处敬请指点,本书是根据<<Android应用开发揭秘>>攒写的,如何把一本书读薄,是一件值得思考的问题.相信看过那本书的都知道有5 ...
- Popular MVC框架swagger+knif4j接口文档工具使用示例
Popular MVC框架swagger接口文档工具使用示例 简介 此项目介绍如何使用popularmvc内置的swagger+knife4j实现简单易用的实时API文档,支持在线调试接口! 此项目只 ...
- 开发者必备工具,一键生成接口文档、调用示例
前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...
- 开发必备工具,快速生成接口文档、调用示例、mock配置
前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...
- python 生成html文档,Python使用pyh生成HTML文档的方法示例
Python使用pyh生成HTML文档的方法示例 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: Python使用pyh生成HTML文档的方法示例.txt ] (友 ...
- Qt 读取XML文档的简单示例
目录名字 XML简介 Qt 操作XML文档一般方法 使用DOM读取XML文档 示例代码:读取XML文档 XML简介 XML(Extensible Markup Language,可扩展标记语言)是一种 ...
- python 生成html_Python使用pyh生成HTML文档的方法示例
最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网 ...
最新文章
- 《用Python进行自然语言处理》第2章 获得文本语料和词汇资源
- CentOS 6.0安装RPMforge源
- css3学习总结1--CSS3选择器
- 开放源代码GIS资源集锦
- 炒股炒成亿万富翁? 胡润财富报告称人数还不少
- JAVA数组、算法、递归
- 前端特效——简单下雪(纯css)
- Ubuntu安装OpenRasp后台管理
- 取“乐”自己,虎力全开 飞利浦×Ed Hardy联名系列限量发售
- QCC3040---earbud init module
- PHP玄帧道长,青龙道长率众弟子朝真“凝真宫”
- python数据分析岗位做什么_给力!数据分析岗位内部人的建议,可以少走很多弯路...
- H264 Annex B 与 AVCC的区别
- 散热性能测试软件,性能测试及散热表现
- lamdba表达式的使用
- 机械精度设计与检测|表面粗糙度
- 化骨龙 GPS M80Pro 拆解
- PLSQL如何保存用户名和密码
- 银行数据资产的理解及盘点
- RC5编码格式的遥控器解码、PCA9633器件控制代码示例、串口通信程序示例、IIC通信示例
热门文章
- 2202知识图谱推荐系统,终终终于于于于于于于于于更新了
- 【回顾】推荐系统的十二大评价指标总结
- linux周期执行某任务方法
- 当自己颓废的时候怎么激励自己?
- makefile:5: *** missing separator. Stop.
- 【直播预告】腾讯广告实时策略数据框架建设
- YYDS!对比学习还能这么用?
- php中 s=,PHP错误表中的所有值=’s’
- python中split拆分数组_Python 数组分割
- 干货!Facebook多账号养号技巧,对封号说拜拜!