使用递归函数回显菜单树
如果你有一个 MySQL 数据库,其中分层数据组织在不同的根下,你可能会遇到需要生成一个复制此结构的 HTML 菜单树。这涉及到以递归方式显示根类别及其子类别。
为了实现此目的,可以使用递归 PHP 函数来遍历数据库记录并构建 HTML 标记。该函数需要类别数据以及可选的父标识符和深度级别。
该函数迭代类别,搜索与指定父级匹配的元素。如果找到匹配,它会生成一个
以下修订后的 PHP 函数包含优化以防止空
<code class="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>'; $sub = $this->recurse($categories, $category['id'], $level + 1); if ($sub != '<ul></ul>') { $ret .= $sub; } $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
为了提高性能,建议查询数据库以包含一个指示每个类别的子类别数量的字段。此信息可用于确定是否递归遍历子类别:
<code class="php">select Category.*, (select count(distinct c1.id) from Category as c1 where c1.root = Category.id) as ChildCount from Category</code>
通过此增强功能,可以相应地修改递归函数:
<code class="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>'; if ($category['ChildCount'] > 0) { $ret .= $this->recurse($categories, $category['id'], $level + 1); } $ret .= '</li>'; } } return $ret . '</ul>'; }</code>
以上是如何使用递归 PHP 函数从存储在 MySQL 数据库中的分层数据有效地生成 HTML 菜单树?的详细内容。更多信息请关注PHP中文网其他相关文章!