php实现无限级分类的树形结构

数据结构和方法如下:

$items = array(1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
);function tree($items){$tree = array();	//初始化树结构数据foreach($items as $value){if(isset($items[$value['pid']])){	//如果当前父级数据存在$items[$value['pid']]['son'][] = &$items[$value['id']];	//在对应父级元素添加 son 元素数据,添加的数据为当前数据}else{	//如果当前父级数据不存在$tree[] = &$items[$value['id']];	//将当前数据添加到树结构数据里}}return $tree;	
}function genTree($items) {foreach ($items as $item)$items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];	//与上方法一样,只是键值不一样return isset($items[0]['son']) ? $items[0]['son'] : array();
}print_r(tree($items));
print_r(genTree($items));

返回结果如下:

Array
([0] => Array([id] => 1[pid] => 0[name] => 江西省[son] => Array([0] => Array([id] => 3[pid] => 1[name] => 南昌市)[1] => Array([id] => 13[pid] => 1[name] => 赣州市[son] => Array([0] => Array([id] => 14[pid] => 13[name] => 赣县[son] => Array([0] => Array([id] => 16[pid] => 14[name] => 茅店镇[son] => Array([0] => Array([id] => 18[pid] => 16[name] => 义源村)[1] => Array([id] => 19[pid] => 16[name] => 上坝村)))[1] => Array([id] => 17[pid] => 14[name] => 大田乡)))[1] => Array([id] => 15[pid] => 13[name] => 于都县)))))[1] => Array([id] => 2[pid] => 0[name] => 黑龙江省[son] => Array([0] => Array([id] => 4[pid] => 2[name] => 哈尔滨市[son] => Array([0] => Array([id] => 6[pid] => 4[name] => 香坊区[son] => Array([0] => Array([id] => 8[pid] => 6[name] => 和兴路[son] => Array([0] => Array([id] => 10[pid] => 8[name] => 东北林业大学)[1] => Array([id] => 12[pid] => 8[name] => 哈尔滨师范大学)))))[1] => Array([id] => 7[pid] => 4[name] => 南岗区[son] => Array([0] => Array([id] => 9[pid] => 7[name] => 西大直街[son] => Array([0] => Array([id] => 11[pid] => 9[name] => 哈尔滨工业大学)))))))[1] => Array([id] => 5[pid] => 2[name] => 鸡西市)))
)
Array
([1] => Array([id] => 1[pid] => 0[name] => 江西省[son] => Array([3] => Array([id] => 3[pid] => 1[name] => 南昌市)[13] => Array([id] => 13[pid] => 1[name] => 赣州市[son] => Array([14] => Array([id] => 14[pid] => 13[name] => 赣县[son] => Array([16] => Array([id] => 16[pid] => 14[name] => 茅店镇[son] => Array([18] => Array([id] => 18[pid] => 16[name] => 义源村)[19] => Array([id] => 19[pid] => 16[name] => 上坝村)))[17] => Array([id] => 17[pid] => 14[name] => 大田乡)))[15] => Array([id] => 15[pid] => 13[name] => 于都县)))))[2] => Array([id] => 2[pid] => 0[name] => 黑龙江省[son] => Array([4] => Array([id] => 4[pid] => 2[name] => 哈尔滨市[son] => Array([6] => Array([id] => 6[pid] => 4[name] => 香坊区[son] => Array([8] => Array([id] => 8[pid] => 6[name] => 和兴路[son] => Array([10] => Array([id] => 10[pid] => 8[name] => 东北林业大学)[12] => Array([id] => 12[pid] => 8[name] => 哈尔滨师范大学)))))[7] => Array([id] => 7[pid] => 4[name] => 南岗区[son] => Array([9] => Array([id] => 9[pid] => 7[name] => 西大直街[son] => Array([11] => Array([id] => 11[pid] => 9[name] => 哈尔滨工业大学)))))))[5] => Array([id] => 5[pid] => 2[name] => 鸡西市)))
)

参考:https://www.cnblogs.com/zzg521/p/6761576.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/107389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS代码混淆-从入门到放弃

​ 目录 1. 什么是iOS代码混淆? 2. iOS自动代码混淆的方法是什么? 3. iOS代码混淆的作用是什么? 4. 怎么样才能做到更好的iOS代码混淆? 总结 参考资料 1. 什么是iOS代码混淆? 代码混淆是指将程序中的方法名、属…

ggplot2 -- geom_linerange 函数的简单使用

brief 需要三个参数确定一个直线,x轴位置,y轴起始位置,y轴结束位置。 有别于一些垂直辅助线,可以实现柱状图,瓷砖图等等。 example 实现柱状图 library(tidyverse)tibble(theta seq(from 0, to 1, by .1),prio…

Jmeter之Bean shell使用详解

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精…

MySQL 约束,视图,索引及常见函数

​​​​​​ ​​​​​​​ 2-MySQL 约束,视图,索引及常见函 1 SQL约束 SQL 约束用于规定表中的数据规则。实际上就是表中数据的限制条件。是为了保证数据的完整性而实现的一套机制。 MySQL的约束种类如下: 非空约束:NOT NULL NOT NULL约束强制…

私有化部署AI智能客服,解放企业成本,提升服务效率

在信息时代,企业面临着服务效率提升和成本压力的双重挑战。作为一个领先品牌,WorkPlus致力于为企业提供私有化部署的AI智能客服解决方案。本文将深入探讨WorkPlus AI智能客服如何帮助企业解放成本、提升服务效率以及打造个性化的卓越客户体验。 AI智能客…

安全典型配置(三)使用ACL禁止特定用户上网案例

【微|信|公|众|号:厦门微思网络】 安全典型配置(一)使用ACL限制FTP访问权限案例_厦门微思网络的博客-CSDN博客本例中配置的本地用户登录密码方式为irreversible-cipher,表示对用户密码采用不可逆算法进行加密,非法用…

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-LSTM-Attention数据分类预测分类效果基本描述模型描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-LSTM-Attention数据分类预测,运行环境Matlab2021b及以…

python+opencv+机器学习车牌识别 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于机器学习的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖,适…

mysql查询当天,近一周,近一个月,近一年的数据

1.mysql查询当天的数据 select * from table where to_days(时间字段) to_days(now()); 2.mysql查询昨天的数据 select * from table where to_days(now( ) ) - to_days( 时间字段名) 1 3.mysql查询近一周的数据 SELECT * FROM table WHERE date(时间字段) > DATE_SU…

Studio One6.5最新版本新增了对Linux的支持

音乐制作人们,这是你们翘首以待的消息。数字音频工作站(DAW)已经成为音乐制作专业人士重要工具之一。 遗憾的是,对于 Linux 用户而言,选择十分有限。最受欢迎的选择通常是开源 DAW,如 Ardour、Audacity和闭…

【go学习笔记】Go errors 最佳实践

文章目录 一、Error Type1. Sentinel Error(预定义Error字符串错误值)1.1 缺点 2. Error types(错误类型)2.1 缺点 3. Opaque errors(不透明错误)3.1 Assert errors for behaviour, not type 二、Handling …

RabbitMQ的5种模式——再探RabbitMQ的模式,简单、工作,发布订阅(广播),路由、主题 页面分析

前言 RabbitMQ作为一款常用的消息中间件,在微服务项目中得到大量应用,其本身是微服务中的重点和难点,有不少概念我自己的也是一知半解,本系列博客尝试结合实际应用场景阐述RabbitMQ的应用,分析其为什么使用&#xff0…

【SpringCloud-11】SCA-sentinel

sentinel是一个流量控制、熔断降级的组件,可以替换第一代中的hystrix。 hystrix用起来没有那么方便: 1、要在调用方引入hystrix,没有ui界面进行配置,需要在代码中进行配置,侵入了业务代码。 2、还要自己搭建监控平台…

2023双11笔记本电脑候选名单(截止2023.10.13的价格,双十一活动可能会更便宜一点)

以下是我最近几天查阅抖音,B站,知乎,百度,朋友后候选出来的一些6000-8000的游戏本电脑,标绿的属性是相比之下较为优秀的 附上几个网上的CPU和显卡排行网站 CPU性能排行榜 - CPU天梯图 - 最强CPU2023(较为全面的CPU排行,收录四千多款) 笔记本性能排行榜 - 快科技天梯榜 笔记本CP…

MySQL进阶(再论JDBC)——JDBC编程思想的分析 JDBC的规范架构 JDBC相关的类分析

前言 SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQ…

数据结构-----红黑树简介

目录 前言 1.什么是红黑树? 2.为什么需要红黑树?(与AVL树对比) 3.红黑树的特性 前言 在此之前我们学习过了二叉排序树和平衡二叉树(AVL树),这两种树都是属于搜索树的一种,那么今天…

ubuntu编译 linphone sdk android源码下载

1、下载代码 git clone https://gitlab.linphone.org/BC/public/linphone-sdk.git --recursive 2、更新 cd linphone-sdkgit submodule update --init --recursive 3、下载android ndk ​ wget https://googledownloads.cn/android/repository/android-ndk-r23c-linux.z…

web 性能优化详解(Lighthouse工具、优化方式、强缓存和协商缓存、代码优化、算法优化)

1.性能优化包含的方面 优化性能概念宽泛,可以从信号、系统、计算机原理、操作系统、网络通信、DNS解析、负载均衡、页面渲染。只要结合一个实际例子讲述清楚即可。 2.什么是性能? Web 性能是客观的衡量标准,是用户对加载时间和运行时的直观…

2.3 初探Hadoop世界

文章目录 零、学习目标一、导入新课二、新课讲解(一)Hadoop的前世今生1、Google处理大数据三大技术2、Hadoop如何诞生3、Hadoop主要发展历程 (二)Hadoop的优势1、扩容能力强2、成本低3、高效率4、可靠性5、高容错性 (三…

在C++和Python的项目中使用ROS

如果搜索如何使用ROS,搜索结果肯定是先建立工作空间,在创建功能包等等步骤,但其实不需要这么麻烦。 在Python中使用ROS,只需要在Pycharm的Project Structure中的Add Content Root加入ros的packages就可以了,如下图 在…