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) {}

完美解决!!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的学生档案管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

android开发布局知识

插件开发的视频笔记&#xff1a;

跨境电商一定要做跨境独立站的6个原因!一键对接电商API接口瞬间拥有全球各大平台几十亿商品

跨境电商为什么要做独立站&#xff1f;它的优势又有哪一些&#xff1f; 如果说我们的企业是做BtoB的跨境电商&#xff0c;那今天这个内容一定要看仔细。 拥有了独立站你就是最高权力者&#xff0c;一切尽在自己掌控中&#xff01; 第一呢&#xff0c;独立站它就是我们自己做的…

IP行业API助力于网络分析和数据挖掘

引言 在当今数字化时代&#xff0c;数据成为了企业、科研机构和政府决策者的重要资源&#xff0c;而IP行业API则成为了数据分析及挖掘的工具之一。IP行业API是一种能够查询IP地址所属的行业分类信息的应用程序接口&#xff0c;它能够提供在网络分析、用户行为分析及大数据挖掘…

【PG】PostgreSQL13主从流复制部署(详细可用)

目录 版本 部署主从注意点 1 主库上创建复制用户 2 主库上修改pg_hba.conf文件 3 修改文件后重新加载配置使其生效 4 主库上修改配置文件 5 重启主库pg使参数生效 6 部署从库 7 备份主库数据至从库 停止从库 备份从库的数据库目录 新建数据库数据目录data 创建和…

客户服务质量提升的三种思路

客户服务质量是企业在市场竞争中立于不败之地的重要因素之一&#xff0c;优秀的客户服务不仅可以提高客户满意度&#xff0c;还可以提高客户黏度和回头率。随着经济的发展&#xff0c;客户服务行业也在不断发展壮大。在这个竞争激烈的行业中&#xff0c;企业如何提高客户服务质…

送水服务预约小程序内容该如何做

无论小区还是办公楼等场景&#xff0c;送水服务往往有较高需求&#xff0c;同时该服务属于长期稳定性的&#xff0c;因此对品牌来说&#xff0c;如何打造品牌获取更多用户及转化非常重要&#xff0c;然而在实际订水过程中&#xff0c;又会面临着一些难题&#xff1a; 1、品牌传…

基于SSM的学院就业信息网设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【FPGA】正确处理设计优先级--或许能帮你节省50%的资源

概述 假如现在有一种方法–可以在不怎么需要修改已有设计的情况下&#xff0c;就可以帮您节省50%的设计资源&#xff0c;那你会试试看吗&#xff1f; 当前市场环境下&#xff0c;更低廉的成本却可获得同等性能无疑是极具诱惑的。本文将介绍一种FPGA设计技术&#xff0c;该技术…

docker创建并访问本地前端

docker创建并访问本地前端&#xff0c;直接上命令&#xff1a; 安装nginx镜像&#xff1a; docker pull nginx 查看已安装的nginx&#xff1a; docker images 创建DockerFile文件&#xff0c;直接在当前文件夹种创建 touch Dockerfile 在Dockerfile写入内容&#xff1a; F…

ISP算法——UVNR

ISP算法——UVNR 概念简介 UVNR也就是经过CSC只有在YUV域对UV两个色域进行降噪&#xff0c;在有些方案里也叫CNR&#xff08;chroma noise reduction&#xff09;。主要就是在YUV域针对彩燥进行特殊处理的一系列算法。 关于噪声产生的原因在前面关于降噪的文章和视频中已经做…

Redis系列-Redis性能优化与安全【9】

目录 Redis系列-Redis性能优化与安全【9】Redis性能优化策略Redis安全设置与防护措施Redis监控与诊断工具介绍 七、Redis应用案例与实战八、Redis未来发展与趋势 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &#x1f4af; Redis系列-Redis性能优化与安…

基于Springboot的智慧食堂设计与实现(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的智慧食堂设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项…

数据结构: unordered_map与unordered_set

目录 1.框架 2.结构 unordered_map unordered_set 3.对HashTable的修改 更改模板参数 4.增加迭代器 a.结构 b.运算符重载 c.HashTable封装迭代器 d.unordered_map与unordered_set的迭代器 1.框架 1.复用HashTable ~~> 增加模板参数KeyOfT 来获取 Key值 unorder…

『Nacos』 入门教程

前言 本文为 Nacos 平台快速入门教程&#xff0c;本文将会使用通俗易懂的语言手把手带您了解、使用 Nacos 平台&#xff0c;适合未接触过 Nacos 的初学者 官方手册&#xff1a;Nacos | Nacos 官方仓库&#xff1a;alibaba/nacos 版本&#xff1a;2.X 本文示例代码仓库&#xf…

Ansible自动化运维工具(常用模块与命令)

ansible基于Python开发&#xff0c;实现了批量系统配置&#xff0c;批量程序部署&#xff0c;批量运行命令等功能 ansible特点 部署简单&#xff0c;只需在主控端部署Ansible环境&#xff0c;被控端无需做任何操作&#xff1b;默认使用ssh协议对设备进行管理&#xff1b;有大…

更改 npm的默认缓存地址

npm的默认缓存一般在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache&#xff0c;而c盘往往空间不大。 1、在其他盘新建两个文件夹&#xff0c;如D盘&#xff0c;node_cache和node_global。如下图所示。 2、在cmd中执行npm config set prefix “node_cache的路径”&a…

InSAR数据处理、地形三维重建、形变信息提取、监测丨GMTSAR合成孔径雷达干涉测量丨GNSS、北斗高精度数据处理

目录 ①合成孔径雷达干涉测量InSAR数据处理、地形三维重建、形变信息提取、监测等应用 ②基于GMTSAR合成孔径雷达干涉测量InSAR数据处理、形变信息提取与分析 ③GNSS、北斗高精度数据处理暨新版GAMITGLOBK软件应用 更多应用 ①合成孔径雷达干涉测量InSAR数据处理、地形三维…

网络层+数据链路层+物理层

一)网络层协议: 一)IP协议报头介绍: 咱们的IP协议能够在两点之间规划处一条合适的路径&#xff0c;什么叫做合适&#xff1f;那就得看咱们的TOS是怎么进行选的&#xff0c;比如说选择最大吞吐量&#xff0c;咱们就需要进行选择一个最大的带宽路径&#xff1b; 16位总长度:IP数据…

json字符串转为开闭区间

1.需求背景 1.1 前端页面展示 1.2 前后端约定交互json 按照页面每一行的从左到右 * 示例 [{"leftSymbol":">","leftNum":100,"relation":"无","rightSymbol":null,"rightNum":0}, {"left…