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

yizhihongxing

当我们需要在网站中实现分类功能时,我们通常会使用无限级分类的方法。无限级分类指的是分类可以无限级嵌套,每一级分类下还可以有子分类。下面我将讲解如何使用 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 laravel实现导出PDF功能

    以下是关于“PHP Laravel实现导出PDF功能”的完整使用攻略: 基础知识 在了解PHP Laravel实现导出PDF功能之前需要掌握一些基础知识,包括PDF的基本概念、LaravelPDF的应用等。以下是一些常见的基础知识: PDF的基本概念,包括PDF的定义、PDF的优点、PDF的应用等。 Laravel中PDF的应用,包括Laravel中PDF的…

    PHP 2023年5月12日
    00
  • PHP函数用法详解【初始化、嵌套、内置函数等】

    PHP函数用法详解 1. 函数的初始化 函数是一段封装好的代码块,它可以在程序中反复调用,极大地方便了代码的重复使用和维护。定义一个函数需要用到 function 关键字,后面跟着函数名和一组圆括号,括号内可以定义参数,最后是一组花括号内的函数体。 // 示例:定义一个计算两个数之和的函数 function add($num1, $num2) { $sum …

    PHP 2023年5月26日
    00
  • php中PHPUnit框架实例用法

    针对 PHP 中 PHPUnit 框架实例的用法,我来分享一下详细攻略。 PHPUnit 框架简介 PHPUnit 是一个 PHP的单元测试框架。它是在Junit, SUnit和CppUnit等著名单元测试框架的启发下写成的。PHPUnit 不仅支持建立并运行单元测试,而且支持建立并运行功能测试。 下面,我将介绍 PHPUnit框架的安装及基本使用示例。 安…

    PHP 2023年5月26日
    00
  • 浅谈PHP设计模式的策略模式

    简介: 策略模式又叫做政策模式,用于如何组织和调用算法的,是属于行为型模式的一种。策略模式需要三个角色构成: Context 封装角色:也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。 Strategy 抽象策略角色:通常为接口,指定规则。 ConcreteStrategy 具体策略角色:实现抽象策略中的操作,该…

    PHP 2023年4月19日
    00
  • 隐性调用php程序的方法

    “隐性调用php程序的方法”是指在HTTP请求中,通过一些特殊的方式调用PHP程序,以达到获取目标服务器上敏感信息、执行命令甚至控制服务器等攻击目的的一类攻击手法。 常见的隐性调用PHP程序的方法有以下几种: URL重写 URL重写比较常见的应用就是伪静态,将动态URL转化为易于理解和记忆的静态URL。攻击者可以模仿伪静态的URL重写技术,将动态请求伪装成静…

    PHP 2023年5月23日
    00
  • PHP中一些可以替代正则表达式函数的字符串操作函数

    在PHP中,正则表达式函数是强大的,但是在一些简单的字符串操作中,使用正则表达式函数可能会带来性能损失。因此,PHP也提供了一些可以替代正则表达式函数的字符串操作函数。 1. strpos() strpos() 函数可以用来查找一个字符串中是否包含另一个字符串,如果包含则返回第一次出现的位置。例如,我们可以使用 strpos() 函数来检查一个字符串中是否包…

    PHP 2023年5月26日
    00
  • 十天学会php(2)

    我会从以下几个方面详细讲解“十天学会PHP(2)”的完整攻略: 学习目标 学习内容 学习步骤 示例说明 1. 学习目标 “十天学会PHP(2)”旨在帮助初学者深入学习PHP语言,掌握PHP常用的函数和技巧,掌握PHP面向对象编程的基础知识。 2. 学习内容 “十天学会PHP(2)”包含以下内容: PHP常用函数 PHP高级函数 PHP面向对象编程基础 3. …

    PHP 2023年5月30日
    00
  • 详解如何利用PHP实现RPC

    利用 PHP 实现 RPC 首先需要了解何谓 RPC。RPC(Remote Procedure Call,远程过程调用)是一种进程间通信方式。其思路是:A 机器上的程序通过调用某个远程主机 B 上的程序(即服务),就像调用本地程序一样,而屏蔽了底层网络通信的细节。 下面就是利用 PHP 实现 RPC 的完整攻略: 1. 安装必要的扩展 首先,在 PHP 中实…

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