下面我就来详细讲解一下“PHP递归实现无限分类生成下拉列表的函数”的完整攻略。
一、问题背景
在很多Web应用中,我们需要将多级分类数据以菜单的形式展示给用户,通常可以使用下拉列表实现。但是,分类数据的层次关系可能会非常复杂,这就需要使用递归的方式来生成下拉列表菜单。
二、实现思路
1.定义一个递归函数,传入当前分类的ID和当前分类的层级,层级初始值为0。
2.连接数据库,并使用SELECT语句查询当前分类的所有子分类。
3.如果查询结果为空,则直接返回;否则,遍历查询结果中的每一项进行输出,同时递归调用该函数,传入子分类的ID和层级加1。
4.在输出时,根据子分类所处的层级来进行缩进,以便于在下拉列表中实现子分类以缩进的形式展示。
5.最后关闭数据库连接。
三、代码示例
下面我来展示两个示例,具体代码请参考以下内容。
示例一:使用普通HTML标签生成无限级分类下拉列表
<?php
/**
* 递归生成无限级分类下拉列表
*
* @param int $id 当前分类的ID
* @param int $level 当前分类的层级
*/
function generateMenu($id, $level = 0)
{
// 连接数据库,执行SELECT语句查询所有ID为$id的子分类
// $result = mysqli_query($conn, "SELECT * FROM category WHERE parent_id=$id");
// 虚拟查询结果,用于演示
static $testData = array(
array('id' => 1, 'name' => '一级分类1', 'parent_id' => 0),
array('id' => 2, 'name' => '一级分类2', 'parent_id' => 0),
array('id' => 3, 'name' => '一级分类3', 'parent_id' => 0),
array('id' => 4, 'name' => '二级分类1-1', 'parent_id' => 1),
array('id' => 5, 'name' => '二级分类1-2', 'parent_id' => 1),
array('id' => 6, 'name' => '二级分类2-1', 'parent_id' => 2),
array('id' => 7, 'name' => '三级分类2-1-1', 'parent_id' => 6),
);
$result = array();
foreach ($testData as $data) {
if ($data['parent_id'] == $id) {
$result[] = $data;
}
}
// 遍历查询结果中的每一个子分类,并递归调用generateMenu函数
foreach ($result as $row) {
// 输出当前子分类对应的<option>标签
echo "<option value=\"{$row['id']}\">" . str_repeat(' ', $level * 2) . "{$row['name']}</option>\n";
// 递归调用generateMenu函数,传入子分类的ID和当前层级加一
generateMenu($row['id'], $level + 1);
}
}
// 在form表单中使用下面的代码即可生成无限级分类下拉列表
echo '<select name="cat_id">';
generateMenu(0);
echo '</select>';
?>
示例二:使用Bootstrap框架的多选按钮生成无限级分类下拉列表
<?php
/**
* 递归生成无限级分类下拉列表
*
* @param int $id 当前分类的ID
* @param int $level 当前分类的层级
* @param array|null $selected_ids 预选中的分类ID数组
*/
function generateMenu($id, $level = 0, $selected_ids = null)
{
// 连接数据库,执行SELECT语句查询所有ID为$id的子分类
// $result = mysqli_query($conn, "SELECT * FROM category WHERE parent_id=$id");
// 虚拟查询结果,用于演示
static $testData = array(
array('id' => 1, 'name' => '一级分类1', 'parent_id' => 0),
array('id' => 2, 'name' => '一级分类2', 'parent_id' => 0),
array('id' => 3, 'name' => '一级分类3', 'parent_id' => 0),
array('id' => 4, 'name' => '二级分类1-1', 'parent_id' => 1),
array('id' => 5, 'name' => '二级分类1-2', 'parent_id' => 1),
array('id' => 6, 'name' => '二级分类2-1', 'parent_id' => 2),
array('id' => 7, 'name' => '三级分类2-1-1', 'parent_id' => 6),
);
$result = array();
foreach ($testData as $data) {
if ($data['parent_id'] == $id) {
$result[] = $data;
}
}
// 遍历查询结果中的每一个子分类,并递归调用generateMenu函数
foreach ($result as $row) {
// 判断是否需要将当前分类的多选按钮设定为选中状态
$checked = '';
if ($selected_ids && in_array($row['id'], $selected_ids)) {
$checked = 'checked';
}
// 输出当前子分类对应的多选按钮
echo "<li><label><input type=\"checkbox\" value=\"{$row['id']}\" name=\"cat_id\" $checked> " . str_repeat(' ', $level * 2) . "{$row['name']}</label></li>\n";
// 递归调用generateMenu函数,传入子分类的ID和当前层级加一
generateMenu($row['id'], $level + 1, $selected_ids);
}
}
// 在form表单中使用下面的代码即可生成无限级分类多选按钮列表
echo '<ul class="list-unstyled">';
generateMenu(0, 0, array(4, 7));
echo '</ul>';
?>
以上就是“PHP递归实现无限分类生成下拉列表的函数”完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php递归实现无限分类生成下拉列表的函数 - Python技术站