下面是基于递归实现的PHP树形菜单代码的详细攻略。
1. 首先定义菜单数据
我们要显示的菜单数据通常以数组的形式存储。每个菜单项通常包含以下数据:id(菜单项的唯一标识符)、name(菜单项的名称)、parent_id(父菜单项的唯一标识符)等。
示例数据如下:
$menu = array(
array('id' => 1, 'name' => '菜单项1', 'parent_id' => 0),
array('id' => 2, 'name' => '菜单项2', 'parent_id' => 1),
array('id' => 3, 'name' => '菜单项3', 'parent_id' => 1),
array('id' => 4, 'name' => '菜单项4', 'parent_id' => 2),
array('id' => 5, 'name' => '菜单项5', 'parent_id' => 2),
array('id' => 6, 'name' => '菜单项6', 'parent_id' => 3),
);
2. 编写递归函数
接下来,我们需要编写一个递归函数,用来生成菜单的HTML代码。函数通常需要传入一个参数,即当前菜单项的id。该函数需要实现以下功能:
- 查找当前菜单项的所有子菜单项。
- 生成当前菜单项的HTML代码,并输出。
- 递归调用自身,对当前菜单项的每个子菜单项进行相同的操作。
递归函数代码示例如下:
function generateMenu($parent_id) {
global $menu;
echo '<ul>';
foreach ($menu as $item) {
if ($item['parent_id'] == $parent_id) {
echo '<li>' . $item['name'] . '</li>';
generateMenu($item['id']);
}
}
echo '</ul>';
}
3. 调用递归函数
现在我们只需要调用递归函数即可生成菜单的HTML代码。例如,要在页面中显示根菜单项(即parent_id为0的菜单项),可以这样调用递归函数:
generateMenu(0);
示例说明
下面举两个例子说明:
示例一
如果要生成如下菜单的HTML代码:
- 菜单项1
- 菜单项2
- 菜单项3
- 菜单项4
- 菜单项5
可以使用以下代码:
$menu = array(
array('id' => 1, 'name' => '菜单项1', 'parent_id' => 0),
array('id' => 2, 'name' => '菜单项2', 'parent_id' => 1),
array('id' => 3, 'name' => '菜单项3', 'parent_id' => 1),
array('id' => 4, 'name' => '菜单项4', 'parent_id' => 3),
array('id' => 5, 'name' => '菜单项5', 'parent_id' => 0),
);
function generateMenu($parent_id) {
global $menu;
echo '<ul>';
foreach ($menu as $item) {
if ($item['parent_id'] == $parent_id) {
echo '<li>' . $item['name'] . '</li>';
generateMenu($item['id']);
}
}
echo '</ul>';
}
generateMenu(0);
示例二
如果要生成如下菜单的HTML代码(包含了多级菜单):
- 菜单项1
- 菜单项2
- 菜单项3
- 菜单项4
- 菜单项5
- 菜单项6
- 菜单项7
可以使用以下代码:
$menu = array(
array('id' => 1, 'name' => '菜单项1', 'parent_id' => 0),
array('id' => 2, 'name' => '菜单项2', 'parent_id' => 1),
array('id' => 3, 'name' => '菜单项3', 'parent_id' => 2),
array('id' => 4, 'name' => '菜单项4', 'parent_id' => 3),
array('id' => 5, 'name' => '菜单项5', 'parent_id' => 4),
array('id' => 6, 'name' => '菜单项6', 'parent_id' => 2),
array('id' => 7, 'name' => '菜单项7', 'parent_id' => 0),
);
function generateMenu($parent_id) {
global $menu;
echo '<ul>';
foreach ($menu as $item) {
if ($item['parent_id'] == $parent_id) {
echo '<li>' . $item['name'];
generateMenu($item['id']);
echo '</li>';
}
}
echo '</ul>';
}
generateMenu(0);
希望这些示例代码能帮助你更好地理解基于递归实现的PHP树形菜单代码的写法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于递归实现的php树形菜单代码 - Python技术站