/**

* 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-示例相关推荐

  1. layer之弹层组件文档 layui.layer(v.1.9.0之后)

    弹层组件文档 - layui.layer layer 至今仍作为 layui 的代表作,她的受众广泛并非偶然,而是这数年来的坚持.不弃的执念,将那些不屑的眼光转化为应得的尊重,不断完善和维护.不断建设 ...

  2. boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例

    boost::multiprecision模块将 std::numeric_limits 用作 multiprecision.qbk 上的多精度文档片段的示例 实现功能 C++实现代码 实现功能 bo ...

  3. 14天学会安卓开发(附PDF文档和全部示例代码)

    前言: 本人也是菜鸟,老鸟看了此文有哪里不好之处敬请指点,本书是根据<<Android应用开发揭秘>>攒写的,如何把一本书读薄,是一件值得思考的问题.相信看过那本书的都知道有5 ...

  4. Popular MVC框架swagger+knif4j接口文档工具使用示例

    Popular MVC框架swagger接口文档工具使用示例 简介 此项目介绍如何使用popularmvc内置的swagger+knife4j实现简单易用的实时API文档,支持在线调试接口! 此项目只 ...

  5. 开发者必备工具,一键生成接口文档、调用示例

    前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...

  6. 开发必备工具,快速生成接口文档、调用示例、mock配置

    前言 开发中,接口文档很重要,特别是现在web开发都开始前后端分离了,更加需要一个好的接口文档. 那要怎么快速的出接口文档.调用示例.mock呢?如果太麻烦,很多人就不愿意去写了. 今天给大家介绍一个 ...

  7. python 生成html文档,Python使用pyh生成HTML文档的方法示例

    Python使用pyh生成HTML文档的方法示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python使用pyh生成HTML文档的方法示例.txt ] (友 ...

  8. Qt 读取XML文档的简单示例

    目录名字 XML简介 Qt 操作XML文档一般方法 使用DOM读取XML文档 示例代码:读取XML文档 XML简介 XML(Extensible Markup Language,可扩展标记语言)是一种 ...

  9. python 生成html_Python使用pyh生成HTML文档的方法示例

    最近在项目中需要将结果导出到HTML中,在网上搜索的时候发现了这个库,通过官方的一些文档以及网上的博客发现它的使用还是很简单的,因此选择在项目中使用它. 在使用的时候发现在Python3中有些问题,网 ...

最新文章

  1. 《用Python进行自然语言处理》第2章 获得文本语料和词汇资源
  2. CentOS 6.0安装RPMforge源
  3. css3学习总结1--CSS3选择器
  4. 开放源代码GIS资源集锦
  5. 炒股炒成亿万富翁? 胡润财富报告称人数还不少
  6. JAVA数组、算法、递归
  7. 前端特效——简单下雪(纯css)
  8. Ubuntu安装OpenRasp后台管理
  9. 取“乐”自己,虎力全开 飞利浦×Ed Hardy联名系列限量发售
  10. QCC3040---earbud init module
  11. PHP玄帧道长,青龙道长率众弟子朝真“凝真宫”
  12. python数据分析岗位做什么_给力!数据分析岗位内部人的建议,可以少走很多弯路...
  13. H264 Annex B 与 AVCC的区别
  14. 散热性能测试软件,性能测试及散热表现
  15. lamdba表达式的使用
  16. 机械精度设计与检测|表面粗糙度
  17. 化骨龙 GPS M80Pro 拆解
  18. PLSQL如何保存用户名和密码
  19. 银行数据资产的理解及盘点
  20. RC5编码格式的遥控器解码、PCA9633器件控制代码示例、串口通信程序示例、IIC通信示例

热门文章

  1. 2202知识图谱推荐系统,终终终于于于于于于于于于更新了
  2. 【回顾】推荐系统的十二大评价指标总结
  3. linux周期执行某任务方法
  4. 当自己颓废的时候怎么激励自己?
  5. makefile:5: *** missing separator. Stop.
  6. 【直播预告】腾讯广告实时策略数据框架建设
  7. YYDS!对比学习还能这么用?
  8. php中 s=,PHP错误表中的所有值=’s’
  9. python中split拆分数组_Python 数组分割
  10. 干货!Facebook多账号养号技巧,对封号说拜拜!