gpt4 book ai didi

php - 使用固定顺序的递归从 MySQL 数据库创建嵌套页面列表

转载 作者:行者123 更新时间:2023-11-30 22:27:54 25 4
gpt4 key购买 nike

我正在尝试从存储在 MySQL 数据库中的数据创建一个嵌套的页面列表。我尝试这样做是因为用户可以按照他们想要的方式对页面进行排序(使用 JS 脚本 nestedSortable),然后我可以从该数组中创建一个包含正确顺序的项目的菜单。

我的页面存储了以下数据:

page_id
parent_page_id
ordering
site_id
title

我从数据库中检索了以下内容:

SELECT * FROM `pages` WHERE site_id = '".$iSite_id."' ORDER BY parent_page_id, ordering ASC;

如果页面没有父页面,则 parent_page_id 为 0。

到目前为止一切顺利,但我在理解递归函数的工作原理时遇到了很多问题,并且由于级别的数量(理论上)是无限的,我无法解决创建此函数的问题。

这是我目前所拥有的:

$aPagesMenu = $oPage_controller->return_pages_menu($iSite_id);

function create_menu_recursive($aPagesMenu) {
foreach($aPagesMenu as $aPage) {
if($aPage['parent_page_id']){
$aMenu[$aPage['parent_page_id']][$aPage['page_id']] = $aPage['title'];
//Recursive function call here?
} else {
$aMenu[$aPage['page_id']] = $aPage['title'];
}
return $aMenu;
}

$aRecursiveMenu = create_menu_recursive($aPagesMenu);

我在尝试理解递归函数如何将其内容返回到第一级数组时卡住了?我如何理解这一点并正确地将一层嵌套到另一层?

我真的很想了解这一点,因为它给我带来了很多延迟和问题。欢迎任何帮助!

编辑

从数据库中获取的一些数据:

array(6) {
[0]=>
array(4) {
["page_id"]=>
string(3) "274"
["parent_page_id"]=>
string(1) "0"
["menu_ordering"]=>
string(1) "0"
["page_description"]=>
NULL
}
[1]=>
array(4) {
["page_id"]=>
string(3) "278"
["parent_page_id"]=>
string(1) "0"
["menu_ordering"]=>
string(1) "1"
["page_description"]=>
NULL
}
[2]=>
array(4) {
["page_id"]=>
string(3) "273"
["parent_page_id"]=>
string(3) "274"
["menu_ordering"]=>
string(1) "0"
["page_description"]=>
NULL
}
[3]=>
array(4) {
["page_id"]=>
string(3) "275"
["parent_page_id"]=>
string(3) "274"
["menu_ordering"]=>
string(1) "1"
["page_description"]=>
NULL
}
[4]=>
array(4) {
["page_id"]=>
string(3) "276"
["parent_page_id"]=>
string(3) "275"
["menu_ordering"]=>
string(1) "0"
["page_description"]=>
NULL
}
[5]=>
array(4) {
["page_id"]=>
string(3) "277"
["parent_page_id"]=>
string(3) "275"
["menu_ordering"]=>
string(1) "1"
["page_description"]=>
NULL
}
}

此数据应转换为:

273
--> 275
--> 274
--> 276
--> 277
278
etc..

最佳答案

我搜索了 stackoverflow 上的旧帖子,我想我找到了我要找的东西:PHP Building Recursive Array from List

我使用了以下代码作为递归函数:

private function buildTree($itemList, $parentId) {
// return an array of items with parent = $parentId
$result = array();
foreach ($itemList as $item) {
if ($item['parent_page_id'] == $parentId) {
$newItem = $item;
$newItem['children'] = $this->buildTree($itemList, $newItem['page_id']);
$result[] = $newItem;
}
}

if (count($result) > 0) return $result;
return null;
}

然后我用从数据库中得到的数组调用这个函数:

buildTree($aPages, 0);

它给了我数组 :D

关于php - 使用固定顺序的递归从 MySQL 数据库创建嵌套页面列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com