PHP一个比较完善的树形结构代码
<?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 . ' ', $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 . ' ');$number++;}}return $this->ret;}function have($list, $item){return (strpos(',,' . $list . ',', ',' . $item . ','));}
}
PHP一个比较完善的树形结构代码相关推荐
- 实践,制作一个高扩展、可视化低代码前端,详实、完整
RxEditor是一款开源企业级可视化低代码前端,目标是可以编辑所有 HTML 基础的组件.比如支持 React.VUE.小程序等,目前仅实现了 React 版. RxEditor运行快照: 项目地址 ...
- 一次循环实现List转树形结构(不使用递归)
一.问题描述: 最新项目遇到了一个问题,树形结构加载时会超时,后分析后台代码发现,之前写的生成树形结构代码存在bug,当数据量不大时无法触发,一旦数据量比较大就会超时,就在想有没有什么办法能解决这个问 ...
- mysql 树形结构_MySQL 树形结构数据库设计 | 剑花烟雨江南
程序设计过程中,我们常常用树形结构来表示某些数据的关联关系,如企业的部门上下级.电商平台的商品分类等等,通常而言,我们需要通过数据库来完成数据的持久化.由于关系型数据库没有一个很好的树形结构解决方案, ...
- 前端页面实现树形结构
树形结构的实现 第一步导入js 下载地址:https://codeload.github.com/vakata/jstree/legacy.zip/3.3.4 记得引到用到的页面 HTML代码 < ...
- Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...
- Winform中实现向窗体中拖放照片并显示以及拖放文件夹显示树形结构(附代码下载)
场景 向窗体中拖拽照片并显示效果 向窗体中拖拽文件夹并显示树形结构效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...
- Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用. 创建示例表: CREATE TABLE TBL_TEST ( ID NUMBER, NAME ...
- JAVA定义一个树形的结构_Java自定义树形结构
Java自定义树形结构 Java自定义树形结构 为什么80%的码农都做不了架构师?>>> 树形结构 Java package com.zyl.comm; import java.ut ...
- 国家行业代码数据处理为树形结构
一.获取原始数据 原始数据为excel,数据如下图所示:行业代码为国家标准代码,可以自行进行百度搜索 行业代码规则如下图所示 二.原始数据处理 1.需求是打算将行业代码按树形展示,而在设计树形表结构的 ...
最新文章
- tomcat下面web应用发布路径配置 ( 即虚拟目录配置 )
- 基于python的界面自动化测试-基于 Python 的接口自动化测试实例
- 求职过程记录(5)——黎明到来
- 【CyberSecurityLearning 65】业务安全+业务逻辑漏洞实战
- Spring如何将事件分配给专门的监听器?
- 2DASL:目前最好的开源人脸3D重建与密集对齐算法
- KD树(k-d tree)
- Kuboard云原生管理工具
- 大数据之搭建HDP环境,以三个节点为例(上——部署主节点以及服务)
- 人人能上手:OpenAI发射初学者友好的强化学习教程 | 代码简约易懂
- asr1009查看接口光衰_python脚本检查H3C交换机光衰
- MyBatis-Plus学习
- 数据库中的字段NULL值和''
- 【C/C++】LibVLC库在逐帧提取的开发中回调设置帧格式
- Day 1:矩阵归零消除序列和
- 数学建模一:层次分析法 附代码详解
- c语言编程模拟银行取钱代码,C语言 用初等函数模拟银行取款
- LeetCode刷题(158)~从尾到头打印链表【递归|辅助栈】
- 2019年小学计算机室管理制度,2019年小学信息技术教师工作计划表
- 卡尔曼滤波的细致讲解从一维到多维