PHP简单实现无限级分类的方法

当我们需要在网站中实现分类功能时,我们通常会使用无限级分类的方法。无限级分类指的是分类可以无限级嵌套,每一级分类下还可以有子分类。下面我将讲解如何使用 PHP 简单实现无限级分类的方法。

步骤一:设计数据库

分类功能的实现离不开数据库,因此我们需要事先设计好数据库结构。常用的设计方式是使用两个表:一个表存储分类信息,另一个表存储分类之间的层级关系。

category表:
id int(10) unsigned NOT NULL AUTO_INCREMENT
name varchar(255) NOT NULL
PRIMARY KEY (`id`)

category_relationship表:
id int(10) unsigned NOT NULL AUTO_INCREMENT
parent_id int(10) unsigned NOT NULL COMMENT '上级分类ID'
child_id int(10) unsigned NOT NULL COMMENT '当前分类ID'
PRIMARY KEY (`id`)

我们可以看到,category_relationship表设计得非常简单,只有两个字段:parent_id和child_id,用于存储每个分类的上级分类和当前分类。

步骤二:查询分类

查询分类是无限级分类的关键,我们需要使用递归算法来实现,以下是示例代码:

function getCategoryTree($parentId = 0){
    $result = [];
    $categories = $this->db->query('SELECT * FROM category_relationship WHERE parent_id=' . $parentId);
    if($categories->num_rows > 0){
        while($category = $categories->fetch_assoc()){
            $result[$category['child_id']] = $category;
            $result[$category['child_id']]['children'] = $this->getCategoryTree($category['child_id']);
        }
    }
    return $result;
}

这段代码的作用是:当传入的$parentId为0时,获取所有顶级分类,然后递归查询子分类,直到所有的子分类都被查询完成。关键的地方在于:在查询子分类之前,先将当前分类作为父分类存进$result数组中,再将查询到的子分类存进children字段中。

步骤三:显示分类

分类查询完成后,我们需要将分类信息显示在页面上。那么如何显示呢?以下是示例代码:

function displayCategoryTree($tree, $depth = 0){
    foreach($tree as $category){
        echo str_repeat('-', $depth) . $category['name'] . '<br/>';
        if(isset($category['children'])){
            $this->displayCategoryTree($category['children'], $depth + 1);
        }
    }
}

这段代码的作用是:用递归的方式遍历分类信息并将分类名输出,每个子分类的层级比父分类的层级深一级,用横杠作为缩进符号。

示例一:电商网站商品分类

我们可以在电商网站中使用无限级分类来实现商品分类功能,以下是示例代码:

<?php
class Category {
    private $db;
    public function __construct(mysqli $db){
        $this->db = $db;
    }
    public function getCategoryTree($parentId = 0){
        $result = [];
        $categories = $this->db->query('SELECT * FROM category_relationship WHERE parent_id=' . $parentId);
        if($categories->num_rows > 0){
            while($category = $categories->fetch_assoc()){
                $result[$category['child_id']] = $category;
                $result[$category['child_id']]['children'] = $this->getCategoryTree($category['child_id']);
            }
        }
        return $result;
    }
    public function displayCategoryTree($tree, $depth = 0){
        foreach($tree as $category){
            echo str_repeat('-', $depth) . $category['name'] . '<br/>';
            if(isset($category['children'])){
                $this->displayCategoryTree($category['children'], $depth + 1);
            }
        }
    }
}
$db = new mysqli('localhost', 'user', 'password', 'database');
$category = new Category($db);
$categoryTree = $category->getCategoryTree();
$category->displayCategoryTree($categoryTree);

示例二:博客网站文章分类

我们也可以在博客网站中使用无限级分类来实现文章分类功能,以下是示例代码:

<?php
class Category {
    private $db;
    public function __construct(mysqli $db){
        $this->db = $db;
    }
    public function getCategoryTree($parentId = 0){
        $result = [];
        $categories = $this->db->query('SELECT * FROM category_relationship WHERE parent_id=' . $parentId);
        if($categories->num_rows > 0){
            while($category = $categories->fetch_assoc()){
                $result[$category['child_id']] = $category;
                $result[$category['child_id']]['children'] = $this->getCategoryTree($category['child_id']);
            }
        }
        return $result;
    }
    public function displayCategoryTree($tree, $depth = 0){
        foreach($tree as $category){
            echo str_repeat('-', $depth) . $category['name'] . '<br/>';
            if(isset($category['children'])){
                $this->displayCategoryTree($category['children'], $depth + 1);
            }
        }
    }
}
$db = new mysqli('localhost', 'user', 'password', 'database');
$category = new Category($db);
$categoryTree = $category->getCategoryTree();
$category->displayCategoryTree($categoryTree);

以上就是 PHP 简单实现无限级分类的方法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP简单实现无限级分类的方法 - Python技术站

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

相关文章

  • php中用foreach来操作数组的代码

    当我们需要循环操作数组时,在php中使用foreach是非常方便和常用的方式。下面是使用foreach来操作数组的完整攻略: 1. foreach语法介绍 foreach语法如下: foreach (数组 as $key => $value) { //执行代码 } 其中,“数组”是需要循环操作的数组变量,它可以是一个数组,也可以是一个通过函数或方法返回…

    PHP 2023年5月26日
    00
  • php array_walk_recursive 使用自定的函数处理数组中的每一个元素

    PHP 的 array_walk_recursive 函数可以用于递归地处理多位数组中的每一个元素,通过自定义的回调函数对每个元素进行处理,并保留数组的结构。 使用 array_walk_recursive 函数,需要传入两个参数:待递归处理的数组、自定义的回调函数。回调函数接受两个参数,第一个是当前处理的元素的值,第二个是当前处理的元素的键。回调函数可以对…

    PHP 2023年5月26日
    00
  • 四个PHP非常实用的功能

    以下是“四个PHP非常实用的功能”的完整攻略。 1. 参数前置声明 在php5.6之前,参数前置声明可用于指定函数的参数类型和参数数量。这在保证代码质量和提高安全性方面非常有用。在PHP7中,参数前置声明已成为函数声明的标准部分,它通过 “:类型”语法在函数声明中声明参数,并在函数内验证它们。 function add(int $num1, int $num…

    PHP 2023年5月23日
    00
  • 微信小程序学习笔记之目录结构、基本配置图文详解

    关于“微信小程序学习笔记之目录结构、基本配置图文详解”的完整攻略,我将会分以下几个部分进行讲解: 目录结构的介绍 app.json文件的配置 配置各个页面的json文件 示例说明 总结 1. 目录结构的介绍 微信小程序采用了类似于MVVM的框架来开发应用,应用主要由配置文件和代码文件两部分组成。其中配置文件主要包括:app.json文件、各个页面的json文…

    PHP 2023年5月23日
    00
  • PHP获取文件后缀名的三个函数

    获取文件后缀名是一个常见的操作,也是PHP应用开发中经常用到的技巧。以下是三个常用三个函数的详细介绍和使用示例。 1. pathinfo函数 pathinfo函数可以返回文件路径的信息,包括文件名、目录名、基本名称和扩展名等。可以通过传入不同的参数返回不同的文件信息,其中参数可选包括PATHINFO_DIRNAME(目录名)、PATHINFO_BASENAM…

    PHP 2023年5月26日
    00
  • 这15个免费学习网站 每一个站长都应知道

    “这15个免费学习网站 每一个站长都应知道” 完整攻略 一、背景介绍 随着互联网的发展,越来越多的人开始创建自己的网站,而网站的成功离不开持续的学习与提升。本篇文章将向大家推荐15个免费学习网站,这些网站提供了广泛的在线课程、教程和资料,涵盖了编程、设计、营销等众多方面,可以帮助站长和网站管理员提升自己的技能,拓展知识面,提高工作效率。 二、推荐列表 1. …

    PHP 2023年5月26日
    00
  • OriginLab OriginPro 2018中文设置及破解安装详细教程(附破解下载)

    OriginLab OriginPro 2018中文设置及破解安装详细教程 简介 OriginLab OriginPro 2018是一款专业的数据分析和图形绘制工具,广泛应用于科研、工程、统计分析、数据可视化等领域。本教程将详细介绍OriginPro 2018的中文设置、软件安装以及破解操作。同时提供破解工具下载,供读者参考。 系统需求 操作系统:Windo…

    PHP 2023年5月27日
    00
  • 一些需要禁用的PHP危险函数(disable_functions)

    一些需要禁用的PHP危险函数(disable_functions)是指在PHP代码中可能被滥用或不当使用的函数,这些函数可能会导致严重的安全问题,例如导致服务器被黑客攻击、敏感信息泄露等。因此,对于安全要求较高的系统或应用程序来说,禁用这些危险函数是一个非常重要的防御措施。 以下是一些需要禁用的PHP危险函数: exec:该函数用于执行系统命令,如果恶意用户…

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