php 生成树形数组,php递归生成无限极树状数组

在生成多级树状数组之前,我们一般得到的数据结构如下

[{

"id": 6,

"parent_id": 5,

"name": "体育专题1",

"intro": "体育专题1111介绍",

}, {

"id": 5,

"parent_id": 4,

"name": "体育专题",

"intro": "体育专题介绍",

}, {

"id": 4,

"parent_id": 0,

"name": "体育",

"intro": "体育所有区块",

}, {

"id": 3,

"parent_id": 1,

"name": "最视频",

"intro": "最视频介绍",

}, {

"id": 2,

"parent_id": 1,

"name": "轮播台",

"intro": "首页轮播台介绍",

}, {

"id": 1,

"parent_id": 0,

"name": "首页",

"intro": "首页的所有区块",

}]

我们需要根据其中的pid(parent_id)与id之间的关系,来将数数组转成多级数组

首先考虑,如果使用递归,递归执行的条件是什么?或者反过来说,递归返回的条件是什么?

假设我们用上述数据的第一个元素pid是5,继续找到id为5的数据找到第二个元素,第二个元素pid为4,继续找id为4的元素,id为4的元素pid为0,说明找到了最后

所以代码如下

$newData = $this->digui($data,0);

function digui($arr, $pid = 0)

{

$newArr = [];

foreach ($arr as $item) {

if ($pid == $item['parent_id']) {

$item['children'] = digui($arr, $item['id']);

$newArr [] = $item;

}

}

return $newArr;

}

$newData = $this->digui($data,0);传入的

math?formula=data%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%BA%E5%BC%80%E5%A7%8B%E6%97%B6%E6%8F%8F%E8%BF%B0%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%82%20%60foreach%60%E7%9B%B8%E5%BD%93%E4%BA%8E%E7%94%A8%E6%9D%A5%E9%81%8D%E5%8E%86%E6%AF%8F%E4%B8%AAdata中的元素,而其中的递归相当于找出当前被遍历元素的所有后代元素(包括儿子元素孙子元素)。所以最后我们得到的数据结构如下

[{

"id": 4,

"parent_id": 0,

"name": "体育",

"intro": "体育所有区块",

"created_at": 0,

"updated_at": 0,

"children": [{

"id": 7,

"parent_id": 4,

"name": "体育专题2",

"intro": "体育专题22222介绍",

"created_at": 0,

"updated_at": 0,

"children": []

}, {

"id": 5,

"parent_id": 4,

"name": "体育专题1",

"intro": "体育专题介绍",

"created_at": 0,

"updated_at": 0,

"children": [{

"id": 6,

"parent_id": 5,

"name": "体育专题1-1",

"intro": "体育专题1111介绍",

"created_at": 0,

"updated_at": 0,

"children": []

}]

}]

}, {

"id": 1,

"parent_id": 0,

"name": "首页",

"intro": "首页的所有区块",

"created_at": 0,

"updated_at": 0,

"children": [{

"id": 3,

"parent_id": 1,

"name": "最视频",

"intro": "最视频介绍",

"created_at": 0,

"updated_at": 0,

"children": []

}, {

"id": 2,

"parent_id": 1,

"name": "轮播台",

"intro": "首页轮播台介绍",

"created_at": 0,

"updated_at": 0,

"children": []

}]

}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值