<?php/*** 通用的树型类,可以生成任何树型结构*/
class tree
{/*** 生成树型结构所需要的2维数组* @var array*/var $arr = array();/*** 生成树型结构所需修饰符号,可以换成图片* @var array*/var $icon = array('│', '├', '└');/*** @access private*/var $ret = '';/*** 构造函数,初始化类* @param array 2维数组,例如:* array(*      1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),*      2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),*      3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),*      4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),*      5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),*      6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),*      7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')*      )*/function tree($arr = array()){$this->arr = $arr;$this->ret = '';return is_array($arr);}/*** 得到父级数组* @param int* @return array*/function get_parent($myid){$newarr = array();if (!isset($this->arr[$myid])) return false;$pid = $this->arr[$myid]['parentid'];$pid = $this->arr[$pid]['parentid'];if (is_array($this->arr)) {foreach ($this->arr as $id => $a) {if ($a['parentid'] == $pid) $newarr[$id] = $a;}}return $newarr;}/*** 得到子级数组* @param int* @return array*/function get_child($myid){$a = $newarr = array();if (is_array($this->arr)) {foreach ($this->arr as $id => $a) {if ($a['parentid'] == $myid) $newarr[$id] = $a;}}return $newarr ? $newarr : false;}/*** 得到当前位置数组* @param int* @return array*/function get_pos($myid, &$newarr){$a = array();if (!isset($this->arr[$myid])) return false;$newarr[] = $this->arr[$myid];$pid = $this->arr[$myid]['parentid'];if (isset($this->arr[$pid])) {$this->get_pos($pid, $newarr);}if (is_array($newarr)) {krsort($newarr);foreach ($newarr as $v) {$a[$v['id']] = $v;}}return $a;}/*** -------------------------------------*  得到树型结构* -------------------------------------* @author  Midnight(杨云洲),  yangyunzhou@foxmail.com* @param $myid 表示获得这个ID下的所有子级* @param $str 生成树形结构基本代码, 例如: "<option value=\$id \$select>\$spacer\$name</option>"* @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到* @param $adds* @param $str_group* @return unknown_type*/function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = ''){$number = 1;$child = $this->get_child($myid);if (is_array($child)) {$total = count($child);foreach ($child as $id => $a) {$j = $k = '';if ($number == $total) {$j .= $this->icon[2];} else {$j .= $this->icon[1];$k = $adds ? $this->icon[0] : '';}$spacer = $adds ? $adds . $j : '';$selected = $id == $sid ? 'selected' : '';@extract($a);$parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");$this->ret .= $nstr;$this->get_tree($id, $str, $sid, $adds . $k . '&nbsp;', $str_group);$number++;}}return $this->ret;}/*** 同上一方法类似,但允许多选*/function get_tree_multi($myid, $str, $sid = 0, $adds = ''){$number = 1;$child = $this->get_child($myid);if (is_array($child)) {$total = count($child);foreach ($child as $id => $a) {$j = $k = '';if ($number == $total) {$j .= $this->icon[2];} else {$j .= $this->icon[1];$k = $adds ? $this->icon[0] : '';}$spacer = $adds ? $adds . $j : '';$selected = $this->have($sid, $id) ? 'selected' : '';//echo $sid.'=>'.$id.' : '.$selected.' . <br/>';@extract($a);eval("\$nstr = \"$str\";");$this->ret .= $nstr;$this->get_tree_multi($id, $str, $sid, $adds . $k . '&nbsp;');$number++;}}return $this->ret;}function have($list, $item){return (strpos(',,' . $list . ',', ',' . $item . ','));}
}

PHP一个比较完善的树形结构代码相关推荐

  1. 实践,制作一个高扩展、可视化低代码前端,详实、完整

    RxEditor是一款开源企业级可视化低代码前端,目标是可以编辑所有 HTML 基础的组件.比如支持 React.VUE.小程序等,目前仅实现了 React 版. RxEditor运行快照: 项目地址 ...

  2. 一次循环实现List转树形结构(不使用递归)

    一.问题描述: 最新项目遇到了一个问题,树形结构加载时会超时,后分析后台代码发现,之前写的生成树形结构代码存在bug,当数据量不大时无法触发,一旦数据量比较大就会超时,就在想有没有什么办法能解决这个问 ...

  3. mysql 树形结构_MySQL 树形结构数据库设计 | 剑花烟雨江南

    程序设计过程中,我们常常用树形结构来表示某些数据的关联关系,如企业的部门上下级.电商平台的商品分类等等,通常而言,我们需要通过数据库来完成数据的持久化.由于关系型数据库没有一个很好的树形结构解决方案, ...

  4. 前端页面实现树形结构

    树形结构的实现 第一步导入js 下载地址:https://codeload.github.com/vakata/jstree/legacy.zip/3.3.4 记得引到用到的页面 HTML代码 < ...

  5. Java8 Stream流递归,几行代码搞定遍历树形结构

    欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...

  6. Winform中实现向窗体中拖放照片并显示以及拖放文件夹显示树形结构(附代码下载)

    场景 向窗体中拖拽照片并显示效果 向窗体中拖拽文件夹并显示树形结构效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

  7. Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。

    Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用. 创建示例表: CREATE TABLE TBL_TEST (   ID    NUMBER,   NAME ...

  8. JAVA定义一个树形的结构_Java自定义树形结构

    Java自定义树形结构 Java自定义树形结构 为什么80%的码农都做不了架构师?>>> 树形结构 Java package com.zyl.comm; import java.ut ...

  9. 国家行业代码数据处理为树形结构

    一.获取原始数据 原始数据为excel,数据如下图所示:行业代码为国家标准代码,可以自行进行百度搜索 行业代码规则如下图所示 二.原始数据处理 1.需求是打算将行业代码按树形展示,而在设计树形表结构的 ...

最新文章

  1. tomcat下面web应用发布路径配置 ( 即虚拟目录配置 )
  2. 基于python的界面自动化测试-基于 Python 的接口自动化测试实例
  3. 求职过程记录(5)——黎明到来
  4. 【CyberSecurityLearning 65】业务安全+业务逻辑漏洞实战
  5. Spring如何将事件分配给专门的监听器?
  6. 2DASL:目前最好的开源人脸3D重建与密集对齐算法
  7. KD树(k-d tree)
  8. Kuboard云原生管理工具
  9. 大数据之搭建HDP环境,以三个节点为例(上——部署主节点以及服务)
  10. 人人能上手:OpenAI发射初学者友好的强化学习教程 | 代码简约易懂
  11. asr1009查看接口光衰_python脚本检查H3C交换机光衰
  12. MyBatis-Plus学习
  13. 数据库中的字段NULL值和''
  14. 【C/C++】LibVLC库在逐帧提取的开发中回调设置帧格式
  15. Day 1:矩阵归零消除序列和
  16. 数学建模一:层次分析法 附代码详解
  17. c语言编程模拟银行取钱代码,C语言 用初等函数模拟银行取款
  18. LeetCode刷题(158)~从尾到头打印链表【递归|辅助栈】
  19. 2019年小学计算机室管理制度,2019年小学信息技术教师工作计划表
  20. 卡尔曼滤波的细致讲解从一维到多维

热门文章

  1. 检索数据_19_按照字符串对结果排序
  2. QT、QTE、qtopia区别
  3. ubuntu18.04下安装中文输入法
  4. 判断泛型的值是否为default(T)
  5. 使用java+TestNG进行接口回归测试 1
  6. php对象序列化总出错false
  7. Oracle 10g数据库基础之基本查询语句-中-函数
  8. 实战react技术栈+express前后端博客项目(8)-- 前端管理界面标签管理+后端对应接口开发...
  9. Java中的List
  10. Karma和Jasmine自动化单元测试