php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动

news2025/1/9 0:08:25

直接上代码 + 示例

<?php

    /**
     * php递归生成树形结构 - 无限分类 - 构建树形结构 - 省市区三级联动
     * 
     * @param array $lists 一维数组,包括不同级别的各行数据
     * @param int $parentId 目标节点的父类ID (可以是顶级分类的父ID,也可以是任意节点的父ID)
     * @param string $keyParentId 数组下标 - 父类ID
     * @param string $keySonId 数组下标 - 父类ID
     * @param string $keyChildren 数组新增下标 - 子节点下标
     * 
     * @author Rudon
     * @link https://rudon.blog.csdn.net/
     */
    function getTree($lists, $parentId = 0, $keyParentId = 'parent_id', $keySonId = 'id', $keyChildren = 'children') {
        $tree = [];
        foreach($lists as $k => $v)
        {
            if(array_key_exists($keySonId, $v) && array_key_exists($keyParentId, $v) && $v[$keyParentId] == $parentId) {
                $v[$keyChildren] = getTree($lists, $v[$keySonId], $keyParentId, $keySonId, $keyChildren);
                $tree[] = $v;
            }
        }
        return $tree;
    }


    // 示例
    $rows = array(
        array('id' => 1, 'parent_id' => 0, 'name' => '河北省'),
        array('id' => 2, 'parent_id' => 0, 'name' => '北京市'),
        array('id' => 3, 'parent_id' => 1, 'name' => '邯郸市'),
        array('id' => 4, 'parent_id' => 2, 'name' => '朝阳区'),
        array('id' => 5, 'parent_id' => 2, 'name' => '通州区'),
        array('id' => 6, 'parent_id' => 4, 'name' => '望京'),
        array('id' => 7, 'parent_id' => 4, 'name' => '酒仙桥'),
        array('id' => 8, 'parent_id' => 3, 'name' => '永年区'),
        array('id' => 9, 'parent_id' => 1, 'name' => '武安市'),
        array('id' => 10, 'parent_id' => 8, 'name' => '永年区镇'),
        array('id' => 11, 'parent_id' => 0, 'name' => '上海市')
    );

    // 获取所有省市区关系
    $tree = getTree($rows, 0);

    echo "<pre>";
    print_r($tree);
    echo "</pre>";

    // 获取北京市(ID=2)的各下级
    // $tree = getTree($rows, 2);

    // 结果
    /**
     * 
    Array
    (
        [0] => Array
            (
                [id] => 1
                [parent_id] => 0
                [name] => 河北省
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3
                                [parent_id] => 1
                                [name] => 邯郸市
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 8
                                                [parent_id] => 3
                                                [name] => 永年区
                                                [children] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [id] => 10
                                                                [parent_id] => 8
                                                                [name] => 永年区镇
                                                                [children] => Array
                                                                    (
                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                        [1] => Array
                            (
                                [id] => 9
                                [parent_id] => 1
                                [name] => 武安市
                                [children] => Array
                                    (
                                    )

                            )

                    )

            )

        [1] => Array
            (
                [id] => 2
                [parent_id] => 0
                [name] => 北京市
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 4
                                [parent_id] => 2
                                [name] => 朝阳区
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 6
                                                [parent_id] => 4
                                                [name] => 望京
                                                [children] => Array
                                                    (
                                                    )

                                            )

                                        [1] => Array
                                            (
                                                [id] => 7
                                                [parent_id] => 4
                                                [name] => 酒仙桥
                                                [children] => Array
                                                    (
                                                    )

                                            )

                                    )

                            )

                        [1] => Array
                            (
                                [id] => 5
                                [parent_id] => 2
                                [name] => 通州区
                                [children] => Array
                                    (
                                    )

                            )

                    )

            )

        [2] => Array
            (
                [id] => 11
                [parent_id] => 0
                [name] => 上海市
                [children] => Array
                    (
                    )

            )

    )
    * 
    */

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

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

相关文章

EfficientViT: 高效视觉transformer与级联组注意力

文章目录 摘要1、简介2、用视觉transformer加速2.1. 内存效率2.2. 计算效率2.3. 参数效率 3、高效视觉Transformer3.1、EfficientViT的构建块3.2、EfficientViT网络架构 4、实验4.1、实现细节4.2、ImageNet上的结果4.3、迁移学习结果4.4、 消融实验 5、相关工作6、结论 摘要 2…

手机投屏电脑软件AirServer5.6.3.0最新免费版本下载

随着智能手机的普及&#xff0c;越来越多的人喜欢用手机观看视频、玩游戏、办公等。但是&#xff0c;有时候手机屏幕太小&#xff0c;不够清晰&#xff0c;也不方便操作。这时候&#xff0c;如果能把手机屏幕投射到电脑上&#xff0c;就可以享受更大的视野&#xff0c;更流畅的…

【C++设计模式之命令模式:行为型】分析及示例

简介 命令模式是一种行为型设计模式&#xff0c;它将请求封装成一个对象&#xff0c;从而使不同的请求可以被参数化、队列化或记录化。这种模式允许请求的发送者和接收者进行解耦&#xff0c;同时提供更高的灵活性和可扩展性。 描述 命令模式的核心思想是通过命令对象来封装…

WIN11右键菜单更改为WIN7风格

1.按键盘上的 Win R 组合键&#xff0c;打开运行&#xff0c;输入 regedit 命令&#xff0c;按确定或回车&#xff0c;打开注册表编辑器&#xff1b; 2.注册表编辑器窗口中&#xff0c;依次展开到以下路径&#xff1a; HKEY_CURRENT_USER\Software\Classes\CLSID\ 3.左侧定位…

ICE综述

ICE综述 ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件&#xff0c;基于ICE可以实现电信级的解决方案。在设计网站架构的时候可以使用ICE实现对网站应用的基础对象操作&#xff0c;将基础对象操作和数据库操作封装在这一层&#xff0c;在业务逻辑层以及…

notepad++ 如何去除换行

选中下方的“扩展” “查找目标”输入&#xff1a;\r\n&#xff0c;替换为:空白 最后全部替换。

钡铼DLT645和IEC104转Modbus协议网关BL120DT:构建智能电力网的关键角色

在电力行业中&#xff0c;DLT645和IEC104转Modbus协议网关已成为重要的通信工具&#xff0c;用于将电力设备的数据和状态信息转换为Modbus协议&#xff0c;以便于远程监控和管理。以下是关于钡铼DLT645和IEC104转Modbus协议网关BL120DT在电力行业应用的案例介绍。 某电力公司需…

记一次地市hw从供应商-目标站-百万信息泄露

起因&#xff1a;某市hw、给了某医院的资产&#xff0c;根据前期进行的信息收集就开始打&#xff0c;奈何目标单位资产太少&#xff0c;唯有一个IP资产稍微多一点点&#xff0c;登录框就两个&#xff0c;屡次尝试弱口令、未授权等均失败。 事件型-通用性-反编译jar-Naocs-后台-…

node-red opc-ua节点操作

node-red opc-ua节点操作 一、使用OPC UA客户端工具Softing OPC Client读写OPC节点数据二、 NodeRed通过OPC UA读取数据并写入mysql三、NodeRed订阅opcua数据&#xff0c;并通过mqtt发布 一、使用OPC UA客户端工具Softing OPC Client读写OPC节点数据 使用OPC UA客户端工具Soft…

超级扫描-专业、快速、安全的二维码和条形码工

官网下载地址&#xff1a; 安果移动 视频介绍&#xff1a;超级扫描-专业、快速、安全的二维码和条形码工具_哔哩哔哩_bilibili 在今天的数字化时代&#xff0c;无论您身处哪里&#xff0c;二维码和条形码无处不在。从商店的货架到在线广告&#xff0c;从名片到活动海报 &…

长江存储YMTC 232L QLC量产,低调上架

有粉丝朋友提醒小编&#xff0c;反馈长江存储232L QLC已经量产&#xff0c;并已经开始售卖了。小编一搜&#xff0c;还真是&#xff0c;“当季新品”。 技术规格信息显示&#xff0c;来自长江存储原厂QLC颗粒。 评论区有用户反馈确认是232层的QLC SSD。 但是&#xff0c;有个奇…

Delphi编程:pagecontrol组件的tab字体变大

1、将pagecontrol组件属性中的font的字体变成四号。 2、将tabsheet1属性中的font的字体设置成八号。 结果如下&#xff1a;

Excel插件:StatPlus Pro 7.7.0 Crack

Windows 版 StatPlus 借助 StatPlus&#xff0c;人们可以获得一套强大的统计工具和图形分析方法&#xff0c;可以通过简单直观的界面轻松访问。StatPlus 的可能应用范围几乎是无限的 - 社会学、金融分析、生物统计学、经济学、保险业、医疗保健和临床研究 - 仅举几个该程序已被…

8、Docker数据卷与数据卷容器

一、数据卷(Data Volumes) 为了很好的实现数据保存和数据共享&#xff0c;Docker提出了Volume这个概念&#xff0c;简单的说就是绕过默认的联合文件系统&#xff0c;而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。 数据卷 是一个可供一个或多个容器使用的特殊目…

分分钟搞定MAC丝滑切换node版本,升级node

需求描述 在日常工作中&#xff0c;我们经常会遇到不同项目的依赖需要不同的node版本来运行&#xff0c;这个时候就需要切换node版本啦~~ 如何切换 用node.js的多版本管理器 n 来解决问题 查看node所有版本 npm view node versions 查看当前node版本 node -v安装n模块: …

氟化钡镜片

氟化钡晶体具有良好的光学透过性能&#xff0c;在0.15μm-14.5μm的光谱范围内&#xff0c;可以用作紫外和红外光学窗口。同时&#xff0c;又具有优良的闪烁性能&#xff0c;成为高能物理与核物理、核医学等领域中重要的晶体材料。 特此记录 anlog 2023年10月7日

SpringBoot解决LocalDateTime返回数据为数组问题

现象&#xff1a; 在SpringBoot项目中&#xff0c;接口返回的数据出现LocalDateTime对象被转换成了数组 原因分析&#xff1a; 默认序列化情况下会使用SerializationFeature.WRITE_DATES_AS_TIMESTAMPS。使用这个解析时就会打印出数组。 解决方法&#xff1a; 在配置类中…

什么是原型链(prototype chain)?如何实现继承?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Windows 10 也能安装Kafka?这篇教程让你轻松掌握!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

英特尔® NUC迷你电脑设置带电自启

连接电源后英特尔 NUC迷你电脑可以自动启动吗&#xff1f; (intel.cn) 想死的风还是吹到了公司 | &#x1f468;‍✈️喂&#xff0c;劳动仲裁吗&#xff1f;这里有人强迫猫咪打工&#xff01;&#x1f63f;