首页 > 编程语言 >php---递归获取最上级和所有子级

php---递归获取最上级和所有子级

时间:2024-05-08 09:55:07浏览次数:19  
标签:childs name list pid --- item 子级 php id

在做PHP开发的过程中,经常会需要获取最上级或所有子级的应用场景:

一、获取最顶级

$list = [
    ['id'=>1,'pid'=>0,'name'=>'张飞'],
    ['id'=>2,'pid'=>1,'name'=>'张苞'],
    ['id'=>3,'pid'=>2,'name'=>'张遵'],
    ['id'=>4,'pid'=>3,'name'=>'张三'],
    ['id'=>5,'pid'=>3,'name'=>'张四'],
];

$parent = getParent($list,5);
var_dump($parent);
function getParent($list,$id){
    foreach($list as $item) if($id == $item['id']) $citem = $item; // 当前
    if(!$citem['pid']) return $citem; // 它没有上级,则它本身就是最上级 
    return getParent($list,$citem['pid']);
}

二、获取所有子级

$list = [
    ['id'=>1,'pid'=>0,'name'=>'张飞'],
    ['id'=>2,'pid'=>1,'name'=>'张苞'],
    ['id'=>3,'pid'=>2,'name'=>'张遵'],
    ['id'=>4,'pid'=>3,'name'=>'张三'],
    ['id'=>5,'pid'=>3,'name'=>'张四'],
];
$childs = getChilds($list,1);
var_dump($childs);
var_dump(array_column($childs,'id'));
function getChilds($list,$id){
    $childs = [];
    foreach($list as $item){
        if($id == $item['pid']){
            $childs[] = $item;
            $childs = array_merge($childs,getChilds($list,$item['id']));
        }
    }
    return $childs;
}

打完收工!

标签:childs,name,list,pid,---,item,子级,php,id
From: https://www.cnblogs.com/e0yu/p/18179032

相关文章

  • 服务端缓存页面及IIS缓存设置:iis cache-control设定
    IIS是一个Web服务器软件,可以通过设置Cache-Control标头来控制浏览器或其他客户端如何缓存Web页面或资源。Cache-Control是HTTP协议中的一个响应头,它指示客户端在何种程度上缓存与重新获取资源。Cache-Control标头可用于控制客户端缓存的行为,例如缓存过期时间、是否强制重新验证缓......
  • Computer Basics - Top 10 keyboard shortcuts everyone should know
    REFhttps://www.computerhope.com/tips/tip79.htmTop10keyboardshortcuts(快捷键)everyoneshouldknowUsingkeyboardshortcutscangreatlyincreaseyourproductivity,reducerepetitivestrain,andhelpkeepyoufocused.Forexample,tocopytext,youcanhi......
  • Linux基础03-Linux文件操作命令
    其实啊,说起计算机操作,大部分情况下就是“增删改查”这四个大字儿,文件操作也是这么回事儿。就是改文件的时候得用点专门的编辑器,比如那个Vim。不过Vim这东西,真心不是一两句话就能给你讲清楚的,咱们在后续的章节再好好说道说道。现在学文件操作命令的时候,如果得改文件内容,咱们就先......
  • 界面组件DevExpress Reporting中文教程 - 如何按条件显示页面水印?
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。从防止未经授权的使用到建立所有权和真实性,文本和图像水印可以作为数字指纹。在最近的更......
  • C#的等待界面的方案 - 开源研究系列文章
          上次编写的壁纸管理器(https://www.cnblogs.com/lzhdim/p/18074135),里面需要检索加载目录中的图片,这个有点耗时,所以就想放一个等待窗体,等获取完成再显示操作界面。当时想用异步的方式进行,不过想了一下,直接嵌入到窗体里就行(因为是子窗体),然后想着记录下来,于是就有了此......
  • python-设计并实现计算不同职称的教师工资
    【题目描述】设计教师接口,该接口包含教师工资计算方法。应用(一)中的高校人员信息包,设计不同职称的教师类:教授,副教授,讲师,教师的基本信息包括姓名、性别、出生年月、职称、课时工作量等属性。注意学校对教师每月工资的计算规定如下:固定工资+课时补贴;教授的固定工资为5000元,每个课时补......
  • python-设计异常处理类Cexception,并基于异常处理类设计并实现日期类Date
    【题目描述】定义一个异常类Cexception解决日期类实现中的自定义异常处理。设计的日期类应包含以下内容:① 有三个成员数据:年、月、日;② 有设置日期的成员函数;③ 有用格式"月/日/年"输出日期的成员函数;④ 要求在日期设置及有参构造函数中添加异常处理。【源代码程序......
  • python-设计并实现平面点类Point
    【题目描述】定义一个平面点类Point,对其重载运算符关系运算符,关系运算以距离坐标原点的远近作为基准,远的为大。程序完成对其的测试。【源代码程序】importmathclassPoint():    def__init__(self,x,y):        self.x=x        self.y=y   ......
  • 从零手写实现 tomcat-03-基本的 socket 实现
    创作缘由平时使用tomcat等web服务器不可谓不多,但是一直一知半解。于是想着自己实现一个简单版本,学习一下tomcat的精髓。系列教程从零手写实现apacheTomcat-01-入门介绍从零手写实现apacheTomcat-02-web.xml入门详细介绍从零手写实现tomcat-03-基本的socket实......
  • python教程6.1-模块和包
    模块分类1、内置标准模块(⼜称标准库)执⾏help(‘modules’)查看所有python⾃带模块列表2、第三⽅开源模块,可通过pipinstall模块名联⽹安装3、⾃定义模块模块导入&调用自定义模块创建⼀个.py⽂件,就可以称之为模块,就可以在另外⼀个程序⾥导⼊ 第三方开源模块安装https:......