首页 > 编程语言 >PHP 处理菜单分级树状结构

PHP 处理菜单分级树状结构

时间:2023-12-28 11:02:45浏览次数:36  
标签:菜单 name parent 树状 tree children Array PHP id


<?php  
  
// 原始数组  
$originalArray = [  
    0 => ["id" => 1, "parent_id" => 0, "name" => "首页", "name_id" => "1"],  
    1 => ["id" => 2, "parent_id" => 0, "name" => "用户管理", "name_id" => "2"],  
    2 => ["id" => 3, "parent_id" => 2, "name" => "商品管理", "name_id" => "2-3"],  
    3 => ["id" => 4, "parent_id" => 2, "name" => "余额管理", "name_id" => "2-4"]  
];  
  
// 递归函数,用于构建树状结构  
function buildTree($array, $parentId = 0) {  
    $tree = [];  
    foreach ($array as $item) {  
        if ($item['parent_id'] == $parentId) {  
            $children = buildTree($array, $item['id']);  
            if ($children) {  
                $item['children'] = $children;  
            }  
            $tree[] = $item;  
        }  
    }  
    return $tree;  
}  
  
// 调用递归函数构建树状结构  
$tree = buildTree($originalArray);  
  
// 打印树状结构  
print_r($tree);  
?>

运行上述代码将输出以下结果:

Array  
(  
    [0] => Array  
        (  
            [id] => 1  
            [parent_id] => 0  
            [name] => 首页  
            [name_id] => 1  
        )  
  
    [1] => Array  
        (  
            [id] => 2  
            [parent_id] => 0  
            [name] => 用户管理  
            [name_id] => 2  
            [children] => Array  
                (  
                    [0] => Array  
                        (  
                            [id] => 3  
                            [parent_id] => 2  
                            [name] => 余额管理  
                            [name_id] => 2-3  
                        )  
                    [1] => Array  
                        (  
                            [id] => 4  
                            [parent_id] => 2  
                            [name] => 商品管理  
                            [name_id] => 2-4  
                        )  
                )  
        )  
)

 

这样,你就成功地将原始数组转换成了树状结构。每个节点都有一个唯一的id,以及指向其父节点的parent_id。如果一个节点有子节点,它还将包含一个children数组。

标签:菜单,name,parent,树状,tree,children,Array,PHP,id
From: https://blog.51cto.com/u_13913003/9011189

相关文章

  • 初识php之 nginx + php
    下载php:http://windows.php.net/download/  添加环境变量:配置php.ini文件如果没有php.ini文件则可以复制php.ini-development文件重命名为php.ini文件 找到doc_root修改为项目文件夹注意不要用反斜杠作为路径分隔符  检查extension_dir对应php下面的ext文件......
  • 还原win11右键菜单
    通过注册表修改win+R输入:regedit,打开注册表编辑器定位到:HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID接着,右键点击CLSID键值,新建一个名为{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}的项右键点击新创建的项,新建一个名为InprocServer32的项,按下回车键保存最后选择新创建的项,然后双......
  • 在WInform开发中实现工具栏/菜单的动态呈现
    在Winform系统开发中,为了对系统的工具栏/菜单进行动态的控制,我们对系统的工具栏/菜单进行动态配置,这样可以把系统的功能弹性发挥到极致。通过动态工具栏/菜单的配置方式,我们可以很容易的为系统新增所需的功能,通过权限分配的方式,可以更有效的管理系统的菜单分配到不同的角色用户,也......
  • 自定义php日志类收集应用日志
    <?phpclassMiniLog{ privatestatic$_instance; private$_path; private$_pid; private$_handleArr; function__construct($path){ $this->_path=$path; $this->_pid=getmypid(); } privatefunction__clone(){ } publics......
  • MagicArray:像php一样,让Go业务代码不再卷!
    卷!一个字形容了当今码农行业的现状。一层一层的代码结构,一个一个dto,entity,vo,req,resp。这些对象越来越多,让码农们非常劳于奔命,加一个字段,改一个字段,影响面有多少。代码量也越来越大。有可能一个代码,要建10多个数据对象。这虽然有点夸张,但体现了行业的乱象。我是曾经写php代码的......
  • Flutter 创建一个交错效果的侧边栏菜单
    一、创建一个没有动画效果的菜单import'package:flutter/material.dart';classMenuextendsStatefulWidget{constMenu({super.key});@overrideState<Menu>createState()=>_MenuState();}class_MenuStateextendsState<Menu>{staticc......
  • PHP 操作符spaceship
    PHP操作符spaceshipPHP7.0及以后的版本引入了spaceship操作符(<=>,也被称为三向比较运算符或组合比较运算符),这是一个非常有用的语法糖,用于比较两个表达式的大小。这个操作符返回一个整数值,表示两个表达式之间的关系,如下所示:如果$a小于$b,spaceship操作符返回-1。如果$a......
  • 好用小工具推荐:ExplorerPatcher,支持让Win11任务栏不再合并/右键菜单不再繁琐等
    ExplorerPatcher1、软件简介ExplorerPatcher是一款能够帮助我们让win11换回旧版win10任务栏的软件,让我们能够基于以win10上面那么高效的方式来进行生活或者是工作,不少用户或许已经在系统上安装了Windows11系统,win11在许多地方带来了全新的UI界面,但对于新版的任务栏对于很多老Win......
  • 私有化JVS低代码平台:多级菜单配置详解
    多级菜单是软件系统一种常见的用户界面设计,它允许用户通过点击或选择不同的菜单项来执行不同的操作或访问不同的功能。多级菜单通常由多个级别的菜单组成,每个级别都包含一组可选择的菜单项。用户可以通过点击或选择菜单项来进入下一级菜单,或者执行相应的操作。那么在JVS低代码平台......
  • 树状数组模板
    单点修改,区间查询/区间修改,单点查询template<typenameT>structBIT{#ifndeflowbit#definelowbit(x)(x&(-x));#endif //staticconstintmaxn=5e5+50; intn; vector<T>t; BIT(){} BIT(int_n):n(_n){t.resize(_n+1);} BIT(int_n,vect......