php递归生成多维数组,递归函数从数据库结果生成多维数组

我正在寻找一个函数,该函数需要一个页面/类别的数组(来自平面数据库结果),并根据父ID生成一个嵌套的页面/类别的数组。我想递归地执行此操作,以便可以进行任何级别的嵌套。

例如:我在一个查询中获取所有页面,这就是数据库表的样子

+-------+---------------+---------------------------+

| id | parent_id | title |

+-------+---------------+---------------------------+

| 1 | 0 | Parent Page |

| 2 | 1 | Sub Page |

| 3 | 2 | Sub Sub Page |

| 4 | 0 | Another Parent Page |

+-------+---------------+---------------------------+

这是我要最终在视图文件中处理的数组:

Array

(

[0] => Array

(

[id] => 1

[parent_id] => 0

[title] => Parent Page

[children] => Array

(

[0] => Array

(

[id] => 2

[parent_id] => 1

[title] => Sub Page

[children] => Array

(

[0] => Array

(

[id] => 3

[parent_id] => 1

[title] => Sub Sub Page

)

)

)

)

)

[1] => Array

(

[id] => 4

[parent_id] => 0

[title] => Another Parent Page

)

)

我已经看过并尝试过几乎遇到的所有解决方案(Stack Overflow上有很多解决方案,但是没有运气得到足够通用的东西同时适用于页面和类别)。

这是我得到的最接近的东西,但是它不起作用,因为我正在将孩子分配给第一级父母。

function page_walk($array, $parent_id = FALSE)

{

$organized_pages = array();

$children = array();

foreach($array as $index => $page)

{

if ( $page['parent_id'] == 0) // No, just spit it out and you're done

{

$organized_pages[$index] = $page;

}

else // If it does,

{

$organized_pages[$parent_id]['children'][$page['id']] = $this->page_walk($page, $parent_id);

}

}

return $organized_pages;

}

function page_list($array)

{

$fakepages = array();

$fakepages[0] = array('id' => 1, 'parent_id' => 0, 'title' => 'Parent Page');

$fakepages[1] = array('id' => 2, 'parent_id' => 1, 'title' => 'Sub Page');

$fakepages[2] = array('id' => 3, 'parent_id' => 2, 'title' => 'Sub Sub Page');

$fakepages[3] = array('id' => 4, 'parent_id' => 3, 'title' => 'Another Parent Page');

$pages = $this->page_walk($fakepages, 0);

print_r($pages);

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值