PHP 使用递归方式 将其二维数组整合为层级树 其中层级id 为一个uuid的格式 造成的诡异问题 已解决
不啰嗦 直接上源代码
<?php
function findChildren($list, $p_id){$r = array();foreach ($list as $k => $item) {if ($item['fid'] == $p_id) {unset($list[$k]);$length = count($r);$r[$length] = $item;if ($t = findChildren($list, $item['id'])) {$r[$length]['children'] = $t;}}}return $r;
}function findChildren2($list,$p_id,&$sike=[]) {$r = array();foreach($list as $k=>$item) {if($item['fid']==$p_id && !in_array($item['id'],$sike)) {$menu = $item;array_push($sike,$item['id']);$children = findChildren2($list,$item['id'],$sike);if(!empty($children)) {$menu['children'] = $children;} $r[] = $menu;}}return $r;
}$node_list = [["text"=>"首页","id"=>'1',"fid"=>"0"],["text"=>"基础信息管理","id"=>'2',"fid"=>"0"],["text"=>"站点信息","id"=>'3',"fid"=>'2'],["text"=>"线路信息","id"=>'4',"fid"=>'2'],
];$node_list1 = [["text"=>"首页","id"=>'2bd6db1b-4971-8a89-b2b7-e729ddb78ffa',"fid"=>"0"],["text"=>"基础信息管理","id"=>'376adc62-5414-a36d-eb49-65ae7c7a91b0',"fid"=>"0"],["text"=>"站点信息","id"=>'8ef4a669-68c0-48f7-5078-1d2a487ff901',"fid"=>'376adc62-5414-a36d-eb49-65ae7c7a91b0'],["text"=>"线路信息","id"=>'7b4a1c42-ec66-3fb5-3266-3686d2466bc9',"fid"=>'376adc62-5414-a36d-eb49-65ae7c7a91b0'],
];$node_list2 = [["text"=>"首页","id"=>'2bd6db1b-4971-8a89-b2b7-e729ddb78ffa',"fid"=>"0"],["text"=>"基础信息管理","id"=>'b655b684-e112-5908-a522-f4f96728edb0',"fid"=>"0"],["text"=>"站点信息","id"=>'8ef4a669-68c0-48f7-5078-1d2a487ff901',"fid"=>'b655b684-e112-5908-a522-f4f96728edb0'],["text"=>"线路信息","id"=>'7b4a1c42-ec66-3fb5-3266-3686d2466bc9',"fid"=>'b655b684-e112-5908-a522-f4f96728edb0'],
];$menus_list = findChildren($node_list, 0);
$sike = [];
$menus_list2 = findChildren2($node_list, 0,$sike);
echo "----------------------------------------->>结果1<<------------------------------------".PHP_EOL;
var_dump($menus_list);
echo "----------------------------------------->>结果2<<------------------------------------".PHP_EOL;
var_dump($menus_list2);echo "正常的uuid格式的层级".PHP_EOL;
$menus_list3 = findChildren($node_list1, 0);
$sike1 = [];
$menus_list4 = findChildren2($node_list1, 0,$sike1);
echo "----------------------------------------->>结果3<<------------------------------------".PHP_EOL;
var_dump($menus_list3);
echo "----------------------------------------->>结果4<<------------------------------------".PHP_EOL;
var_dump($menus_list4);echo "不正常的uuid格式的层级".PHP_EOL;
$menus_list5 = findChildren($node_list2, 0);
$sike2 = [];
$menus_list6 = findChildren2($node_list2, 0,$sike2);
echo "----------------------------------------->>结果5<<------------------------------------".PHP_EOL;
var_dump($menus_list5);
echo "----------------------------------------->>结果6<<------------------------------------".PHP_EOL;
var_dump($menus_list6);
结果输出:
----------------------------------------->>结果1<<------------------------------------
array(2) {[0]=>array(3) {["text"]=>string(6) "首页"["id"]=>string(1) "1"["fid"]=>string(1) "0"}[1]=>array(4) {["text"]=>string(18) "基础信息管理"["id"]=>string(1) "2"["fid"]=>string(1) "0"["children"]=>array(2) {[0]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(1) "3"["fid"]=>string(1) "2"}[1]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(1) "4"["fid"]=>string(1) "2"}}}
}
----------------------------------------->>结果2<<------------------------------------
array(2) {[0]=>array(3) {["text"]=>string(6) "首页"["id"]=>string(1) "1"["fid"]=>string(1) "0"}[1]=>array(4) {["text"]=>string(18) "基础信息管理"["id"]=>string(1) "2"["fid"]=>string(1) "0"["children"]=>array(2) {[0]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(1) "3"["fid"]=>string(1) "2"}[1]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(1) "4"["fid"]=>string(1) "2"}}}
}
正常的uuid格式的层级
----------------------------------------->>结果3<<------------------------------------
array(2) {[0]=>array(3) {["text"]=>string(6) "首页"["id"]=>string(36) "2bd6db1b-4971-8a89-b2b7-e729ddb78ffa"["fid"]=>string(1) "0"}[1]=>array(4) {["text"]=>string(18) "基础信息管理"["id"]=>string(36) "376adc62-5414-a36d-eb49-65ae7c7a91b0"["fid"]=>string(1) "0"["children"]=>array(2) {[0]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(36) "8ef4a669-68c0-48f7-5078-1d2a487ff901"["fid"]=>string(36) "376adc62-5414-a36d-eb49-65ae7c7a91b0"}[1]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(36) "7b4a1c42-ec66-3fb5-3266-3686d2466bc9"["fid"]=>string(36) "376adc62-5414-a36d-eb49-65ae7c7a91b0"}}}
}
----------------------------------------->>结果4<<------------------------------------
array(2) {[0]=>array(3) {["text"]=>string(6) "首页"["id"]=>string(36) "2bd6db1b-4971-8a89-b2b7-e729ddb78ffa"["fid"]=>string(1) "0"}[1]=>array(4) {["text"]=>string(18) "基础信息管理"["id"]=>string(36) "376adc62-5414-a36d-eb49-65ae7c7a91b0"["fid"]=>string(1) "0"["children"]=>array(2) {[0]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(36) "8ef4a669-68c0-48f7-5078-1d2a487ff901"["fid"]=>string(36) "376adc62-5414-a36d-eb49-65ae7c7a91b0"}[1]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(36) "7b4a1c42-ec66-3fb5-3266-3686d2466bc9"["fid"]=>string(36) "376adc62-5414-a36d-eb49-65ae7c7a91b0"}}}
}
不正常的uuid格式的层级
----------------------------------------->>结果5<<------------------------------------
array(4) {[0]=>array(3) {["text"]=>string(6) "首页"["id"]=>string(36) "2bd6db1b-4971-8a89-b2b7-e729ddb78ffa"["fid"]=>string(1) "0"}[1]=>array(4) {["text"]=>string(18) "基础信息管理"["id"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"["fid"]=>string(1) "0"["children"]=>array(2) {[0]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(36) "8ef4a669-68c0-48f7-5078-1d2a487ff901"["fid"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"}[1]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(36) "7b4a1c42-ec66-3fb5-3266-3686d2466bc9"["fid"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"}}}[2]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(36) "8ef4a669-68c0-48f7-5078-1d2a487ff901"["fid"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"}[3]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(36) "7b4a1c42-ec66-3fb5-3266-3686d2466bc9"["fid"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"}
}
----------------------------------------->>结果6<<------------------------------------
array(2) {[0]=>array(3) {["text"]=>string(6) "首页"["id"]=>string(36) "2bd6db1b-4971-8a89-b2b7-e729ddb78ffa"["fid"]=>string(1) "0"}[1]=>array(4) {["text"]=>string(18) "基础信息管理"["id"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"["fid"]=>string(1) "0"["children"]=>array(2) {[0]=>array(3) {["text"]=>string(12) "站点信息"["id"]=>string(36) "8ef4a669-68c0-48f7-5078-1d2a487ff901"["fid"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"}[1]=>array(3) {["text"]=>string(12) "线路信息"["id"]=>string(36) "7b4a1c42-ec66-3fb5-3266-3686d2466bc9"["fid"]=>string(36) "b655b684-e112-5908-a522-f4f96728edb0"}}}
}
结果5 出现了一个诡异的效果 也就是子级也跑到和父级一个层级了 这显然不是我们想要的结果
findChildren2 是我为了避免结果5 这种情况而进行改造了
下面是chatGPT 给出的说明

最终结果 修改 使用strcmp
function findChildren($list, $p_id){$r = array();foreach ($list as $k => $item) {//if ($item['fid'] == $p_id) {if (strcmp($item['fid'], $p_id) ===0 ) {unset($list[$k]);$length = count($r);$r[$length] = $item;if ($t = findChildren($list, $item['id'])) {$r[$length]['children'] = $t;}}}return $r;
}function findChildren2($list,$p_id,&$sike=[]) {$r = array();foreach($list as $k=>$item) {//if($item['fid']==$p_id && !isset($sike[$item['id']])) {if (strcmp($item['fid'], $p_id) ===0 ) {$menu = $item;//$sike[$item['id']] = true;$children = findChildren2($list,$item['id'],$sike);if(!empty($children)) {$menu['children'] = $children;}$r[] = $menu;}}return $r;
}
使用该逻辑判断 :if (strcmp($item['fid'], $p_id) === 0) {}
完美解决!!!!!
相关文章:
PHP 使用递归方式 将其二维数组整合为层级树 其中层级id 为一个uuid的格式 造成的诡异问题 已解决
不啰嗦 直接上源代码 <?php function findChildren($list, $p_id){$r array();foreach ($list as $k > $item) {if ($item[fid] $p_id) {unset($list[$k]);$length count($r);$r[$length] $item;if ($t findChildren($list, $item[id])) {$r[$length][children] …...
rv1126-rv1109-添加分区,定制固件,开机挂载功能
===================================================================== 修改分区: 这里是分区的txt文件选择; 这里是分区的划分,我这里回车了,方便看 FIRMWARE_VER: 8.1 MACHINE_MODEL: RV1126 MACHINE_ID: 007 MANUFACTURER: RV1126 MAGIC: 0x5041524B ATAG: 0x00200…...
一台电脑使用多个gitee账号,以及提交忽略部分文件
目录 编辑 一:前言 二:解决方法 三:提交gitee时忽略文件 一:前言 在开发中,我们拥有不止一个 gitee 账号,通常而言一个是公司的,一个是私人的。有时候我们在公司写了一些自己的东西&#…...
解析邮件文本内容; Mime文本解析; MimeStreamParser; multipart解析
原始文本 ------_Part_46705_715015081.1699589700255 Content-Type: text/html;charsetUTF-8 Content-Transfer-Encoding: base64PGh0bWwCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBodHRwLW VxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRt bDsgY2hhcnNldD1VVEYtOCICiAgICAgIC…...
获取请求IP以及IP解析成省份
某些业务需要获取请求IP以及将IP解析成省份之类的,于是我写了一个工具类,可以直接COPY /*** IP工具类* author xxl* since 2023/11/9*/ Slf4j public class IPUtils {/*** 过滤本地地址*/public static final String LOCAL_ADDRESS "127.0.0.1&quo…...
YOLOv8-seg改进:复现HIC-YOLOv5,HIC-YOLOv8-seg助力小目标分割
🚀🚀🚀本文改进:HIC-YOLOv8-seg:1)添加一个针对小物体的额外预测头,以提供更高分辨率的特征图2)在backbone和neck之间采用involution block来增加特征图的通道信息;3)在主干网末端加入 CBAM 的注意力机制; 🚀🚀🚀HIC-YOLOv8-seg小目标分割检测&复杂场景…...
vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower
vscode 终端进程启动失败: shell 可执行文件“C:\Windows\System32\WindowsPower 第一次用vscode,然后遇到这个问题,在设置里搜索 terminal.integrated.defaultProfile.windows 将这里的null改成"Command Prompt" 重启就可以了...
【中间件篇-Redis缓存数据库02】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
Redis高级特性和应用(慢查询、Pipeline、事务、Lua) Redis的慢查询 许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关…...
栈 和 队列
什么是栈? 一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出(LIFO - Last In First Out)的原则。 从数据结构的角度来看&…...
【推荐】一款AI写作大师、问答、绘画工具-「智元兔 AI」
在当今技术飞速发展的时代,越来越多的领域开始应用人工智能(Artificial Intelligence,简称AI)。其中,AI写作工具备受瞩目,备受推崇。在众多的选择中,智元兔AI是一款在笔者使用过程中非常有帮助的…...
阿里云付费用户破100万 用户规模亚洲最大
导读阿里巴巴集团公布2018财年第一季度财报,阿里云达到一个重要里程碑,云计算付费用户数量首次超过100万,成为亚洲首家达到百万级用户规模的云计算公司。同时,企业级市场被云计算人工智能等新技术全面激活,推动该季度营…...
人工智能基础——Python:Matplotlib与绘图设计
人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…...
Ubuntu 配置 Github 的 SSH keys
先进入已有的 Git 目录或使用新建的一个 Git 仓库下。 设置 Github 用户名和邮箱: $ git config --global user.name [Github用户名] $ git config --global user.email [Github认证邮箱]生成 SSH 密钥文件: $ ssh-keygen -t rsa -C [Github认证邮箱]…...
Flink—— Flink Data transformation(转换)
Flink数据算子转换有很多类型,各位看官看好,接下来,演示其中的十八种类型。 1.Map(映射转换) DataStream → DataStream 将函数作用在集合中的每一个元素上,并返回作用后的结果,其中输入是一个数据流&…...
前端读取文件当文件选择相同文件名的文件,内容不会变化
前端读取文件当文件选择相同文件名的文件,内容不会变化 今天遇到个奇怪的bug,使用打开文件,并选择文件时,正常情况会读取文件信息。 但是如果先选择相同的文件名,则内容不会发生变化。 先说结论 只要不使用事件中e…...
PHP 服装销售管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp
一、源码特点 PHP 服装销售管理系统是一套完善的web设计系统mysql数据库 ,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php服装销售管理系统1 二、功能介绍 (1)员工管理:对员工信息…...
用于图像处理的高斯滤波器 (LoG) 拉普拉斯
一、说明 欢迎来到拉普拉斯和高斯滤波器的拉普拉斯的故事。LoG是先进行高斯处理,继而进行拉普拉斯算子的图像处理算法。用拉普拉斯具有过零功能,实现边缘岭脊提取。 二、LoG算法简述 在这篇博客中,让我们看看拉普拉斯滤波器和高斯滤波器的拉普…...
【h5 uniapp】 滚动 滚动条,数据跟着变化
uniapp项目 需求: 向下滑动时,数据增加,上方的日历标题日期也跟着变化 向上滑动时,上方的日历标题日期跟着变化 实现思路: 初次加载目前月份的数据 以及下个月的数据 this.getdate()触底加载 下个月份的数据 onReach…...
ModStartBlog v8.5.0 评论开关布局调整,系统后台全面优化
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场,后台一键快速安装 …...
django|报错SQLite 3.8.3 or later is required的解决方案
迁移原同事写的程序,到新服务器上边。运行报错。解决方案有三种 降低django版本升级sqlite3,不低于3.8.3版本修改django源码 方案一、降低django版本 卸载高版本django pip uninstall django安装低版本,如 pip install django2.1.7注意&…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
