当前位置: 首页 > 面试题库 >

具有递归功能的回显菜单树

益清野
2023-03-14
问题内容

问题: 我想不出对我的具体情况使用递归函数的方式。

情况:

Mysql DB
id | root | name |
root显示给女巫类别的地方这是子类别。

HTML应该如何显示:

    <li><a href="#"><p class="Tier0">Datori</p></a>
                    <ul style="display: block">
                         <li><a href="#"><p class="Tier1">Cookies</p></a></li>
                         <li><a href="#"><p class="Tier1">Events</p></a></li>
                         <li><a href="#"><p class="Tier1">Forms</p></a></li>
                         <li><a href="#"><p class="Tier1">Games</p></a></li>
                         <li><a href="#"><p class="Tier1">Images</p></a>
                            <ul>
                                <li><a href="#"><p class="Tier2">CSS</p></a></li>
                                <li><a href="#"><p class="Tier2">JavaScript</p></a></li>
                                <li><a href="#"><p class="Tier2">JQuery</p></a></li>
                            </ul>
                         </li>
                         <li><a href="#"><p class="Tier1">Navigations</p></a>
                            <ul>
                                <li><a href="#"><p class="Tier2">CSS</p></a></li>
                                <li><a href="#"><p class="Tier2">JavaScript</p></a></li>
                                <li><a href="#"><p class="Tier2">JQuery</p></a></li>
                            </ul>
                        </li>
                         <li><a href="#"><p class="Tier1">Tabs</p></a></li>
                    </ul>
                </li>
                <li><a href="#"><p class="Tier0">Washing Machines</p></a>

我需要什么样的PHP函数才能将其全部打印出来?


问题答案:

怎么样:

function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            $ret .= $this->recurse($categories, $category['id'], $level+1);
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}

此函数要求您首先在数据库中查询可用类别的整个列表,并假设您的根类别的值为null,但是可以根据当前模式的工作方式将该函数更改为接受-1或0。

$categories = { get from database into an multi-dimensional array };
$Tree = $this->recurse($categories);
echo $Tree;

您可以考虑执行以下操作,以防止在父级不存在任何子级时出现任何空的UL:

function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            $sub = $this->recurse($categories, $category['id'], $level+1);
            if($sub != '<ul></ul>')
                $ret .= $sub;
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}

但是,最好的解决方案是选择数据以包括一列,该列包含每个类别有多少个子类别。

select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category

您的功能将是:

function recurse($categories, $parent = null, $level = 0)
{
    $ret = '<ul>';
    foreach($categories as $index => $category)
    {
        if($category['root'] == $parent)
        {
            $ret .= '<li><a href="#"><p class="Tier' . $level . '">' . $category['name'] . '</p></a>';
            if($category['ChildCount'] > 0)
                $ret .= $this->recurse($categories, $category['id'], $level+1);
            $ret .= '</li>';
        }
    }
    return $ret . '</ul>';
}

希望有帮助吗?



 类似资料:
  • 问题内容: (希望)对某些人来说,这是一个非常简单的问题。 我有一个来自mySQL数据库的递归菜单,现在我的主要问题是: 创建URL的最佳方法是什么?我希望输入每行的标题,例如/ eggs / milk / bacon /。鸡蛋处于0级,例如:鸡蛋0,牛奶1,培根2。关于如何动态输出此内容的任何想法? 对于“ cletus”所说的这个问题,我几乎要去做些评论:PHP / MySQL- 建立导航菜单

  • 问题:我想不出根据我的具体情况制作递归函数的方法。 情况: 其中向切换类别显示这是子类别。 HTML应该是什么样子的: 我需要什么样的PHP函数来打印出来?

  • 我想以前也有人问过类似的问题,但我不知道我想做的事情在逻辑上是否可行。 我目前在我们的内部网上使用DDSmoothMenu列出我们所有员工都可以访问的文档。 菜单结构类似于: 菜单的基本结构如下: 我认为它必须涉及某种多维数组和递归目录迭代器,但我希望遍历每个文件夹并创建如上所述的HTML布局。 我认为可以做开始标记,但不确定在目录全部列出后如何做结束标记。

  • 问题内容: 我期望以下内容返回所有元组,将层次结构中的每个父级解析到顶部,但它仅返回最低级别(在查询中指定了其ID)。如何为给定的level_id返回整棵树? 问题答案: 首先,如果您确实是祖父母,则应该如此。其次,您在查询的递归一半中的(隐式)连接条件是向后的,您想让父级脱离,而不是:

  • 本文向大家介绍Vue2递归组件实现树形菜单,包括了Vue2递归组件实现树形菜单的使用技巧和注意事项,需要的朋友参考一下 今天看了老长时间递归组件,官方给的教程太简便了,根本看不出到底怎么用。于是自己查网摸索了一下,这儿只把核心思想写出来。 效果如下图,点击后打开二级菜单,再点击后打开三级。 由于每次递归组件,就相当于实例化了一次组件。所有写在组件data中的值都是该组件专属的。 树状结构:   我

  • 问题内容: 我正在尝试浏览目录中的所有文件,如果有目录,则浏览其所有文件,依此类推,直到没有更多目录可访问。每个处理的项目将添加到下面的函数中的结果数组中。尽管我不确定我能做什么/我做错了什么,但是它不起作用,但是当处理下面的代码时,浏览器的运行速度非常慢,不胜感激,谢谢! 码: 问题答案: 获取目录中的所有文件和文件夹,如果拥有或,请不要调用函数。 您的代码: 输出(示例):