PHP实现无限级分类(不使用递归)

下面我会详细讲解如何使用 PHP 实现无限级分类,并且不使用递归的方式。

什么是无限级分类

无限级分类是指分类与分类之间存在父子关系,每个分类下都可以包含多个子分类,而每个子分类又可以包含多个子分类,以此类推,可以无限延伸下去的分类体系。它在很多网站的分类功能中都有使用,比如商品分类、文章分类等。

不使用递归的无限极分类实现

  1. 从数据库中获取所有分类的数据。
$sql = "SELECT * FROM categories";
$result = mysqli_query($conn, $sql);
$categories = [];
while ($row = mysqli_fetch_assoc($result)) {
    $categories[] = $row;
}
  1. 遍历分类数据,将所有分类数据按照父子关系存储到一个数组中。
$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,
    ]
]
  1. 遍历 $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技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • Android自定义控件之圆形/圆角的实现代码

    在讲解Android自定义控件之圆形/圆角实现代码的攻略之前,我们先来了解一下Android中自定义控件的基本概念和实现方法。 Android自定义控件的基本概念和实现方法 在Android中,我们可以通过继承View或其子类,实现自定义控件。其中主要的子类有: ImageView:用于显示图片的控件。 TextView:用于显示文字的控件。 Button:…

    other 2023年6月25日
    00
  • C++中的变长参数深入理解

    C++中的变长参数深入理解 一、什么是变长参数 变长参数,即“可变参数”,指的是函数参数的数量和类型在编译阶段并不确定,而是在运行时动态决定。在C++中,我们可以使用标准库头文件<cstdarg>中的宏来实现变长参数。 二、如何实现变长参数 实现变长参数的核心宏有三个,分别是va_list、va_start和va_arg。 1. va_list宏…

    other 2023年6月27日
    00
  • BBSMAX

    BBSMAX 的完整攻略 BBSMAX 是一款基于 PHP 和 MySQL 的开源论坛系统,具有良好的扩展性和可定制性。本文将为您提供一份 BBSMAX 的完整攻略,包括安装、配置和使用等方面的内容,同时提供两个示例说明。 安装 BBSMAX 的安装步骤如下: 下载 BBSMAX:从官方网站下载最新版本的 BBSMAX。 解压文件:将下载的 BBSMAX 压…

    other 2023年5月5日
    00
  • C#实现获取设置IP地址小工具

    C#实现获取设置IP地址小工具攻略 简介 在C#中,可以使用System.Net.NetworkInformation命名空间提供的类来获取和设置IP地址。这个小工具可以帮助你获取当前系统的IP地址,并且可以设置新的IP地址。 步骤 1. 引入命名空间 首先,在你的C#代码文件中引入System.Net.NetworkInformation命名空间,以便使用…

    other 2023年7月31日
    00
  • Android应用App更新实例详解

    以下是使用标准的Markdown格式文本,详细讲解Android应用App更新的完整攻略: Android应用App更新实例详解 步骤1:获取当前应用的版本号 在进行应用更新之前,首先需要获取当前应用的版本号。您可以使用PackageManager类获取应用的包名和版本号。 示例代码: String packageName = getPackageName(…

    other 2023年10月13日
    00
  • 你真的会使用Java的方法引用吗

    你真的会使用Java的方法引用吗 什么是方法引用? 在Java中,方法引用是一种用来简化Lambda表达式的方式。它允许您直接引用现有方法,而不是编写完整的Lambda表达式。方法引用是将方法视为数据的概念,可以像引用普通对象一样操作方法。 方法引用的语法 方法引用的语法如下: Class::MethodName 其中,Class代表类名或者对象名,Meth…

    other 2023年6月28日
    00
  • DR.COM宽带认证客户端安装教程

    DR.COM宽带认证客户端安装教程 一、前言 DR.COM是一家提供网络认证服务的公司,它的宽带认证客户端是一个Windows系统下的软件,用于校园网、公共WIFI等场所认证登陆使用。本篇教程主要介绍DR.COM宽带认证客户端的安装过程。 二、安装步骤 在DR.COM官网下载客户端安装程序,安装程序的名称为DRComClient.exe。下载链接为:http…

    other 2023年6月25日
    00
  • mybatisplus之—basemapper

    MyBatis-Plus之BaseMapper MyBatis-Plus是MyBatis的增强工具,提供了许多实用的功能,其中一就是BaseMapper。BaseMapper是MyBatis-Plus提供一个通用Mapper接口,可以用于快开发数据访问层(DAO)本略将介绍BaseMapper的基本用法和示例。 基本用法 BaseMapper提供许多常用的数…

    other 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部