PHP递归导航

标签 php mysql recursion

所以我有这个关于递归数组的问题。我想要的是从我的数据库中获取一个带有 PHP 的递归数组,这样我就可以创建一个带有子菜单的导航菜单,而无需创建另一个表。

这是我目前拥有的功能;

function getMenu($tree = null){
        $tree2 = array();
        $tree = getPages();
        foreach($tree as $i => $item){
            if($item->parent_id == $item->ID){
                $tree2[$item->ID] = $item;
                $tree2[$item->ID]['submenu'] = getMenu($tree, $item->ID);
            }
        }

        return $tree2;
    }

为了清楚起见,我并没有自己创建这个函数,而是从 http://www.jugbit.com/php/php-recursive-menu-with-1-query/ 获得的并在我认为正确的地方进行了调整

$tree 变量来自这个函数;

function getPages($limit = null,$sort = null) {
     global $db;
     $query = $db->prepare('SELECT * FROM pages ORDER BY Position');
     $query->execute();
     return $query->fetchAll(PDO::FETCH_CLASS);
}

在过去的两天里,我一直在努力解决这个问题,试图找出我做错了什么。

如果我打印 getMenu 函数,我得到的只是一个空数组,我不知道为什么。它确实让 foreach 正确,我不认为这是问题所在,但我不是 100% 确定..

我希望问题很清楚,但如果不是,我很抱歉,并会在需要的地方澄清。

提前致谢

最佳答案

getPages中,如果你想让它返回一个关联数组,那么你需要做:

return $query->fetchAll(PDO::FETCH_ASSOC);

然后你的 getMenu 看起来像:

function getMenu($tree = null, $parent = 0) {
    if (!isset($tree))
        $tree = getPages();

    $tree2 = array();
    foreach($tree as $i => $item) {
        if($item['id'] == $parent) {
            $tree2[$item['id']] = $item;
            $tree2[$item['id']]['submenu'] = getMenu($tree, $item['id']);
        }
    }

    return $tree2;
}

关于PHP递归导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14367910/

相关文章:

java - 二分查找。打印出与目标进行比较的元素?

php - 在 php 中制作 mysql 单例数据库类的任何更简单/更好的方法?

php - 如何使用 RedBeanPHP 从表中获取 id 编号顺序有间隙的随机行?

php - 按两个不同的日期和时间mysql分组

java - 遍历n维空间

javascript - 从递归函数 catch 中解析一个 promise

php - 如何在 PHP 中替换第一个 HTML <strong></strong> 标签

php - 我的 Stripe 付款工作正常。但现在我想从数据库中捕获

mysql - 我如何找到销售一种类型但不销售另一种类型的制造商?

php - 将表 ID 存储在另一个表中以便稍后提取数据