下面我会详细讲解如何使用 PHP 实现无限级分类,并且不使用递归的方式。
什么是无限级分类
无限级分类是指分类与分类之间存在父子关系,每个分类下都可以包含多个子分类,而每个子分类又可以包含多个子分类,以此类推,可以无限延伸下去的分类体系。它在很多网站的分类功能中都有使用,比如商品分类、文章分类等。
不使用递归的无限极分类实现
- 从数据库中获取所有分类的数据。
$sql = "SELECT * FROM categories";
$result = mysqli_query($conn, $sql);
$categories = [];
while ($row = mysqli_fetch_assoc($result)) {
$categories[] = $row;
}
- 遍历分类数据,将所有分类数据按照父子关系存储到一个数组中。
$tree = [];
foreach ($categories as $category) {
if ($category['parent_id'] == 0) {
$tree[$category['id']] = $category;
} else {
$tree[$category['parent_id']]['children'][] = $category;
}
}
在这里,我们使用了一个 $tree
数组来存储分类数据,数组中的元素的父子关系对应着分类数据的父子关系,根据上例,我们最终希望的 $tree
数组结构应如下:
[
1 => [
'id' => 1,
'name' => '顶级分类1',
'parent_id' => 0,
'children' => [
[
'id' => 2,
'name' => '子分类1-1',
'parent_id' => 1,
],
[
'id' => 3,
'name' => '子分类1-2',
'parent_id' => 1,
'children' => [
[
'id' => 4,
'name' => '子分类1-2-1',
'parent_id' => 3,
'children' => [
[
'id' => 5,
'name' => '子分类1-2-1-1',
'parent_id' => 4,
]
]
]
]
]
]
],
6 => [
'id' => 6,
'name' => '顶级分类2',
'parent_id' => 0,
]
]
- 遍历
$tree
数组,将分类数据格式化为具有层级关系的 HTML 结构。
function buildMenuHtml(array $tree, int $level = 0): string
{
$html = '';
foreach ($tree as $node) {
$html .= '<li>' . $node['name'];
if (isset($node['children'])) {
$html .= '<ul>' . buildMenuHtml($node['children'], $level + 1) . '</ul>';
}
$html .= '</li>';
}
return $html;
}
$menuHtml = '<ul>' . buildMenuHtml($tree) . '</ul>';
echo $menuHtml;
在这里,我们使用了一个 buildMenuHtml 函数,该函数接受一个 $tree 数组以及一个可选的 $level 参数(默认值为 0),$level 参数用于确定当前分类所处的层级。函数最终返回一个包含层级关系的 HTML 结构。
示例:
假设网站后台分类管理界面中需要展示一个层级关系的分类树,我们可以使用上面的代码来生成 HTML 标签,然后将其插入到 DOM 中,最终呈现出一个分类树的形式,方便管理员进行分类管理。
又如,如果我们是一个电商平台,其中有一个商品分类页面,需要展示所有的商品分类,我们可以使用上面的代码生成 HTML 标签,然后插入到模板中,最终呈现出一个包含层级关系的商品分类的页面。
以上就是使用 PHP 实现无限级分类,并且不使用递归的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现无限级分类(不使用递归) - Python技术站