php 实现树形结构

时间:2023-01-19 11:35:51

<?php
class Tree{
private $OriginalList;
public $pk;//主键字段名
public $parentKey;//上级id字段名
public $childrenKey;//用来存储子分类的数组key名

function __construct($pk="id",$parentKey="pid",$childrenKey="children"){
if(!empty($pk) && !empty($parentKey) && !empty($childrenKey)){
$this->pk=$pk;
$this->parentKey=$parentKey;
$this->childrenKey=$childrenKey;
}else{
return false;
}

}
//载入初始数组
function load($data){
if(is_array($data)){
$this->OriginalList=$data;
}
}

/**
* 生成嵌套格式的树形数组
* array(..."children"=>array(..."children"=>array(...)))
*/
function DeepTree($root=0){
if(!$this->OriginalList){
return FALSE;
}
$OriginalList=$this->OriginalList;
$tree=array();//最终数组
$refer=array();//存储主键与数组单元的引用关系
//遍历
foreach($OriginalList as $k=>$v){
if(!isset($v[$this->pk]) || !isset($v[$this->parentKey]) || isset($v[$this->childrenKey])){
unset($OriginalList[$k]);
continue;
}
$refer[$v[$this->pk]]=&$OriginalList[$k];//为每个数组成员建立引用关系
}
//遍历2
foreach($OriginalList as $k=>$v){
if($v[$this->parentKey]==$root){//根分类直接添加引用到tree中
$tree[]=&$OriginalList[$k];
}else{
if(isset($refer[$v[$this->parentKey]])){
$parent=&$refer[$v[$this->parentKey]];//获取父分类的引用
$parent[$this->childrenKey][]=&$OriginalList[$k];//在父分类的children中再添加一个引用成员
}
}
}
return $tree;
}
}
$data=array(
0 => array("id"=>1,"pid"=>0),
1 => array("id"=>2,"pid"=>0),
2 => array("id"=>3,"pid"=>1),
3 => array("id"=>4,"pid"=>3),
4 => array("id"=>5,"pid"=>2),
);
var_dump($data);
$tree=new Tree("id","pid","children");
$tree->load($data);
$treelist=$tree->DeepTree();//所有分类树结构
var_export($treelist);//查看结果
$subtree=$tree->DeepTree(1);//获取id为1下面的子树
var_export($subtree);
?>

转自http://www.thinkphp.cn/topic/7487.html

php 实现树形结构的更多相关文章

  1. js文章列表的树形结构输出

    文章表设计成这样了 后端直接给了无任何处理的json数据,现在要前端实现树形结构的输出,其实后端处理更简单写,不过既然来了就码出来 var doclist = [{ "id": 1 ...

  2. GridView 树形结构分组的功能

    在“会飞的鱼”博客中看到GridView实现树形结构的代码,经过修改,添加了树形结构中的复选框功能,欢迎吐槽. 源地址:http://www.cnblogs.com/chhuic/archive/20 ...

  3. &lbrack;从产品角度学EXCEL 02&rsqb;-EXCEL里的树形结构

    这是<从产品角度学EXCEL>系列第三篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布 ...

  4. C&num; EasyUI树形结构权限管理模块

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节和大家探讨下C#使用EasyUI树形结构/Tree构 ...

  5. YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

    树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>*>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...

  6. Java创建树形结构算法实例

    在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构. 首先是需要的JavaBe ...

  7. Atitit 常见的树形结构 红黑树 &&num;160&semi;二叉树 &&num;160&semi;&&num;160&semi;B树 B&plus;树 &&num;160&semi;Trie树&&num;160&semi;attilax理解与总结

    Atitit 常见的树形结构 红黑树  二叉树   B树 B+树  Trie树 attilax理解与总结 1.1. 树形结构-- 一对多的关系1 1.2. 树的相关术语: 1 1.3. 常见的树形结构 ...

  8. 使用ztree&period;js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  9. Linux&sol;Ubuntu tree 命令以树形结构显示文件夹目录结构

    1.安装命令工具 sudo apt-get -y install tree 2.可以查看关于tree命令的帮助信息 $ tree --help usage: tree [-adfghilnpqrstu ...

  10. 部门树形结构&comma;使用Treeview控件显示部门

    部门树形结构.设计张部门表用于存储部门编码.名称.上级部门id,使用Treeview控件显示部门树,并实现部门增删改.移动.折叠等功能.特别提示,部门有层级关系,可用donetbar的adtree控件 ...

随机推荐

  1. 通读AFN③--HTTPS访问控制&lpar;AFSecurityPolicy&rpar;,Reachability&lpar;AFNetworkReachabilityManager&rpar;

    这一篇主要介绍使用AFN如何访问HTTPS网站以及这些做法的实现原理,还有介绍AFN的网络状态监测部分AFNetworkReachabilityManager,这个模块会和苹果官方推荐的Reachab ...

  2. &period;NET项目开发的几个非常重要的项目设置

    在开发.NET项目的时候,包括Winform项目和Web方面的项目,编译和部署的时候,都需要考虑到是32位的X86方式,还是64位的方式,有时候还需要进行调试,如果没有合理设置好这些关系,还可能出现无 ...

  3. Tensorflow学习笔记3:TensorBoard可视化学习

    TensorBoard简介 Tensorflow发布包中提供了TensorBoard,用于展示Tensorflow任务在计算过程中的Graph.定量指标图以及附加数据.大致的效果如下所示, Tenso ...

  4. 设计模式学习起点 UML类图笔记

    UML类图笔记 大学开设的软件设计课程一般都会学习UML类图,大部分关于设计模式的描述都是使用的UML类图,可以说类图的表示是学习设计模式的起点.UML定义类之间的关系主要有六种:泛化关系.实现关系. ...

  5. MIUI11系统怎么样启用root权限的教程

    MIUI11系统如何启用了ROOT超级权限?做开发的人都知道,安卓机器有ROOT超级权限,一旦手机启用了root相关权限,可以实现更多的功能,举个例子做开发的人公司的营销部门的妹纸,使用较多营销工具都 ...

  6. myBatis之Clob &amp&semi; Blob

    1. 表结构 1.1 在Mysql中的数据类型,longblob  -->  blob, longtext --> clob 2. 配置文件, 请参考  myBatis之入门示例 3. L ...

  7. Nodejs初识随笔

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 单线程运行,不 ...

  8. C&num; winform C&sol;S WebBrowser qq第三方授权登录

    qq的授权登录,跟微信相似,不同的地方是: 1 申请appid与appkey的时候,注意填写回调地址. 2 这里可以在WebBrowser的是Navigated事件中直接得到Access Token, ...

  9. linux如何使make输出makefile中所有的规则和变量

    答: make -p (会执行makefile,加入-q可以阻止makefile的执行)

  10. C&num; 实现将多个word文档合并成一个word文档的功能

    前段时间项目上遇到这么一个需求,需要将多个OCR识别的word文档合并成一个,于是就在网上找了找,自己修改了一下.在这里跟大家分享一下,希望有用的到的. 要做多word文档合并,首先要导入Micros ...