首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果具有父id,则将项目的php数组转换为分层数组

将项目的PHP数组转换为分层数组的方法是通过递归实现的。下面是一个示例代码:

代码语言:txt
复制
function buildTree(array $array, $parentId = 0) {
    $tree = array();
    
    foreach ($array as $item) {
        if ($item['parent_id'] == $parentId) {
            $children = buildTree($array, $item['id']);
            if ($children) {
                $item['children'] = $children;
            }
            $tree[] = $item;
        }
    }
    
    return $tree;
}

// 示例数据
$projects = array(
    array('id' => 1, 'name' => '项目1', 'parent_id' => 0),
    array('id' => 2, 'name' => '项目2', 'parent_id' => 0),
    array('id' => 3, 'name' => '子项目1', 'parent_id' => 1),
    array('id' => 4, 'name' => '子项目2', 'parent_id' => 1),
    array('id' => 5, 'name' => '子项目3', 'parent_id' => 2),
    array('id' => 6, 'name' => '子项目4', 'parent_id' => 2),
    array('id' => 7, 'name' => '子子项目1', 'parent_id' => 3),
    array('id' => 8, 'name' => '子子项目2', 'parent_id' => 3),
);

$tree = buildTree($projects);
print_r($tree);

上述代码中,buildTree函数接受一个包含项目信息的数组和一个父ID作为参数。它首先创建一个空数组$tree用于存储分层数组。然后遍历项目数组,如果某个项目的父ID与给定的父ID相等,则将该项目添加到$tree数组中。同时,递归调用buildTree函数来构建该项目的子项目数组,并将其赋值给$item['children']。最后,返回构建好的分层数组。

对于上述示例数据,输出结果如下:

代码语言:txt
复制
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 项目1
            [parent_id] => 0
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [name] => 子项目1
                            [parent_id] => 1
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 7
                                            [name] => 子子项目1
                                            [parent_id] => 3
                                        )

                                    [1] => Array
                                        (
                                            [id] => 8
                                            [name] => 子子项目2
                                            [parent_id] => 3
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 4
                            [name] => 子项目2
                            [parent_id] => 1
                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [name] => 项目2
            [parent_id] => 0
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [name] => 子项目3
                            [parent_id] => 2
                        )

                    [1] => Array
                        (
                            [id] => 6
                            [name] => 子项目4
                            [parent_id] => 2
                        )

                )

        )

)

这样,我们成功将具有父ID的项目PHP数组转换为了分层数组。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RunTime 之其他实践运用

原理描述:用runtime提供的函数遍历Model自身所有属性,如果属性在json中有对应的值,则将其赋值。...字典转模型我们需要考虑三种特殊情况: 1.当字典的key和模型的属性匹配不上 2.模型中嵌套模型(模型属性是另外一个模型对象) 3.数组中装着模型(模型的属性是一个数组,数组中是一个个模型对象)...,进而对数组中每个模型遍历并字典转模型,但是我们不知道数组中的模型都是什么类型,我们可以声明一个方法,该方法目的不是让其调用,而是让其实现并返回模型的类型。...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class class...重写Model中description方法,达到打印对象信息的目的。

94630

扁平数组和树形结构互相转化

一、扁平数组转树形结构===========扁平数组转树形结构可以通过递归实现,但是为了实现时间复杂度、空间复杂度最优,该选用什么方法呢var data = [{ id: 1, pid: 0, name...,放置修改后的数据遍历原数组,将数组中每一项的pid与根pid(案例中的pid为0,直接传进来的数据)进行比较为每一项增加children属性children项数据需要递归原数据,并且把该项的id传过去...存储数据Map数据,并为每一项创建children属性pid为0说明是根数据,把pid为0的这一项放到result中pid不为0说明该项为子数据且已存在父级数据(因为itemMap(pid)存在),所以只需要把该项数据...push到父级数据的children属性。...Object(data[i]);result.push(tempObj);map.set(data[i].id, tempObj);}}return result;}二、树形结构转扁平数组======

22710
  • 透过网红面试题,超详细解析 parseInt,学不懂找我

    (function callback(currentValue[, index[, array]]) { // 新数组的返回元素 }[, thisArg]) 参数: callback:数组迭代的每一项执行的回调函数...,可以有三个参数: currentValue:当前迭代项 index:当前迭代项的索引 (可选) array: map 方法调用的数组(可选) thisObject:在执行回调函数时定义的 this 对象...通过上面的几个例子相信对parseInt有一定的了解,这里我要补充一点关于进制转换的知识,就当复习巩固了(因为面试时,我变更了一下题目的数值,发现有的人不会,或者说忘记了进制转换) 任意进制如何转十进制...如果是字符串,遵循下列规则: 如果是字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”变成1,“123”会变成123,而“011”会变成11(前导的零被忽略了); 如果字符串中包含有效的浮点格式...,如“1.1”,则将其转换为对应的浮点数值(同样也会忽略前导零); 如果字符串中包含有效的十六进制格式,例如"0xf",则将其他转换为相同大小的十进制整数值; 如果字符串是空的(不包含任何字符),则将其转换为

    3.5K10

    Laravel Validation 表单验证(二、验证表单请求)

    , ], ], 在 PHP 文件中指定自定义属性 如果你希望将验证信息的 :attribute 部分替换为自定义属性名称,你可以在 resources/lang/xx/validation.php...字符串、数字、数组和文件的计算方式都使用 size 方法。 boolean 验证的字段必须可以转换为 Boolean 类型。...Exists 规则的基本用法 'state' => 'exists:states' 如果未指定 column 选项,则将使用字段名称。...你可以通过使用「点」语法将数据库的名称添加到数据表前面来实现这个目的: 'email' => 'exists:connection.staff,email' 如果要自定义验证规则执行的查询,可以使用 Rule...: Rule::unique('users')->ignore($user->id, 'user_id') 默认情况下, unique 规则将检查与要验证字段名称相匹配的列的唯一性。

    29.3K10

    PHP(3):数据类型

    PHP(3):数据类型 一、 数据类型 数据类型是具有相同特性的一组数据的统称。PHP早就提供了丰富的数据类型,PHP 5中又有更多补充。...当转换为 boolean 时,以下值被认为是 FALSE: ● 布尔值 FALSE ● 整型值 0(零) ● 浮点型值 0.0(零) ● 空白字符串和字符串 "0" ● 没有成员变量的数组...那么也就意味着单引号或双引号不能出现在字符数据之内,否则将会引起解析错误!如果内容中必须要出现单引号或双引号的话,那么就必须使用转义符!...三、 复合数据类型 1、 数组(array) 将一系列类似的项聚集在一起,并以某种特定的方式进行排列和引用。...数组双具体的分为数字索引数组和关联数组 2、 对象(object) PHP支持的另一种复合数据类型是对象。

    1.9K10

    PHP核心编程知识点

    一、PHP基本语法 PHP标记:一共有四种,只推荐使用第一种 语句结束符:分号 注释:行注释(//  #)和块注释(/*   */),注释的规范 二、常见的输出语句 print echo var_dump...二转八:三并一 二、十六之间的互转 十六转二:一拆四 二转十六:四并一 八、十六之间的互转 八转十六:先一拆三,再四并一 十六转八:先一拆四,再三并一 3.整型数据 表示形式 十进制 八进制,以...6.字符串数据 单引号 双引号 定界符:Heredoc 定界符:Nowdoc 7.特殊数据类型 NULL类型 resource型 8.类型转换 类型自动转换 字符串型自动转换为数值型 其他类型自动转换为布尔型...流程控制语句的替代语法 把所有的左花括号都用冒号来代替 整个流程控制语句结束后,再用endIf、endWhile、endFor、endForeach等来结束 do-while没有这种替代语法 9.文件载入 体现了网站的分层设计...func_get_arg()用来获取某一个实参的值,索引是从0开始 func_num_args(),用于获取实参的数量 函数体 return语句 函数内允许出现多个return语句,但是只能执行其中的一条 如果一个函数内确实有很多的值需要返回

    3.4K51

    ThinkPHP中登陆确认机制

    想边听边看就点播放按钮吧,我写这个的时候就是边听这个歌边整理的= = [player autoplay="0"] 目的是做一个限制页面,取名首页(Index/index),如果没登陆过的话就跳转到登陆页面...>display(); }else{ $this->redirect('Login/login'); } 登陆页面的表单中包括username、password、verify(验证码)三项和登录按钮...//或者select() find() //或者根据指定字段进行查询,getByXXX(),例如getByMg_name($name),父类Model__call封装的方法 $info =...$this -> getByMg_name($name); //$info=null 说明用户名错误 //$info = 一维数组 用户名正确 if ($info !...$this->display(); } } 现在通用的流行方法是先查询用户名是否存在,若不存在,提示错误,如果存在,则将数据库里面的密码信息和用户输入的信息比对,出结果。

    47340

    数据导入与预处理-课程总结-01~03章

    数据变换——属性构造 1.2.5 数据规约 1.数据规约目的 2.数据规约方法 第2章 numpy库 2.1 数组对象 2.2 创建数组 2.3 访问数组元素 2.3.1 通过整数索引 2.3.2 使用花式索引访问元素...数组排序操作 2.5.3 数组转置 2.5.4 随机数生成 1. numpy的random库 第3章 pandas基础 3.1 series 3.1.1 创建series对象 3.1.2 Series...如: 同名异义:数据源A中的属性ID和数据源B中的属性ID分别描述的是菜品编号和订单编号,即描述的是不同的实体。...2.5.3 数组转置 熟悉数组的转置,可以通过T属性、transpose()方法、swapaxes()方法实现数组转置操作 2.5.4 随机数生成 1. numpy的random库 python里随机数生成主要有两种方式...使用loc和iloc访问数据 使用iloc和loc也可以访问具有分层索引的Series类对象或DataFrame类对象。

    3.1K20

    看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

    因此,常见的做法是定义一个Python列表,对它进行操作,然后再转换为NumPy数组,或者用np.zeros和np.empty初始化数组,预分配必要的空间: ?...如果需要列向量,则有转置方法对其进行操作: ? 能够从一维数组中生成二位数组列向量的两个操作是使用命令reshape重排和newaxis建立新索引: ?...append就像hstack一样,该函数无法自动转置一维数组,因此再次需要对向量进行转置或添加长度,或者使用column_stack代替: ?...仅存储大小正确的矢量就足够了,运算规则将处理其余的内容: ?...如果不方便使用axis,可以将数组转换硬编码为hstack的形式: ? 这种转换没有实际的复制发生。它只是混合索引的顺序。 混合索引顺序的另一个操作是数组转置。检查它可能会让我们对三维数组更加熟悉。

    6K20

    OC史上最实用的runtime总结,面试、工作你看我就足够了

    字典转模型我们需要考虑三种特殊情况: 1.当字典的key和模型的属性匹配不上 2.模型中嵌套模型(模型属性是另外一个模型对象) 3.数组中装着模型(模型的属性是一个数组,数组中是一个个模型对象) 根据上面的三种特殊情况...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class class = NSClassFromString(type); value...,数组中是一个个模型对象,例如下面的数据我就可以通过books[0].name获取到C语言程序设计 JSON数据 我们既然能获取到属性类型,那就可以拦截到模型的那个数组属性,进而对数组中每个模型遍历并字典转模型...,但是我们不知道数组中的模型都是什么类型,我们可以声明一个方法,该方法目的不是让其调用,而是让其实现并返回模型的类型。...= [class objectWithDict:value]; }else if ([type isEqualToString:@"NSArray"]) { // 如果是数组类型,将数组中的每个模型进行字典转模型

    1.5K20

    OC最实用的runtime总结,面试、工作你看我就足够了!前言什么是runtime?如何应用运行时?

    字典转模型我们需要考虑三种特殊情况: 1.当字典的key和模型的属性匹配不上 2.模型中嵌套模型(模型属性是另外一个模型对象) 3.数组中装着模型(模型的属性是一个数组,数组中是一个个模型对象)...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class...JSON数据 我们既然能获取到属性类型,那就可以拦截到模型的那个数组属性,进而对数组中每个模型遍历并字典转模型,但是我们不知道数组中的模型都是什么类型,我们可以声明一个方法,该方法目的不是让其调用,而是让其实现并返回模型的类型...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class...,将数组中的每个模型进行字典转模型,先创建一个临时数组存放模型 NSArray *array = (NSArray *)value;

    1.3K120

    100 个常见的 PHP 面试题

    如果我们要检查变量是否具有值,可以使用 empty() 函数。 39) unlink() 函数的作用是? unlink() 函数专用于文件系统处理。它用于删除文件。...我们必须在PHP的配置文件中启用魔术引号项。 44) get_magic_quotes_gpc() 函数的作用是? 函数 get_magic_quotes_gpc() 告诉我们魔术引号是否已打开。...), (real) – 强制转换为浮点型 (string) – 强制转换为字符串 (array) – 强制转换为数组 (object) – 强制转换为对象 55) 条件语句何时以 endif 结尾?...$_FILES 是一个包含通过 HTTP POST 方式上传到当前脚本的项目的数组。...81) 数组运算符 ‘===’ 是什么意思? a === b 如果 a 和 b 具有相同顺序和相同类型的键/值对,则为 TRUE 。 82) a != b 和 a !== b有什么区别? !

    21K50

    PHP数据结构(十六) ——B树

    B树是一种多路平衡查找树,其对于加快查找速度具有重要意义。...2)如果元素存在B树,则将该元素在其结点中进行删除。 3)删除该元素后,首先判断该元素是否有左右孩子结点,如果有,则上移孩子结点中的某个和被删除的元素最相近的元素到父节点中。...5)如果相邻右边的兄弟节点的关键字个数大于(m/2)-1,则将右兄弟节点最小的关键字上移到父节点,把父节点中小于此关键字的最大的那个关键字下移到刚刚删除元素的节点的最右边,以保证每个兄弟节点都满足要求。...7)上述6的合并情况结束后,由于父节点少了一个元素,则需要检查父节点是否满足要求,不满足的话,需要父节点和父节点的兄弟节点进行5或6的操作。如果父节点是根节点,则合并后,B树少了一层。...PHP数据结构(六) ——树与二叉树之概念及存储结构 PHP数据结构(六) ——数组的相乘、广义表 PHP数据结构(五) ——数组的压缩与转置 PHP数据结构(四) ——队列 PHP数据结构(三)——

    1.5K110
    领券