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获取php,mysql,apche的版本信息示例代码

    获取PHP、MySQL、Apache等软件的版本信息,可以使用相应的PHP函数实现。 获取PHP版本信息 通过PHP函数phpversion()可以获取当前所使用的PHP版本信息。 示例代码如下: <?php echo "当前PHP版本为:" . phpversion(); ?> 该示例代码将输出类似以下内容的信息: 当前PH…

    PHP 2023年5月23日
    00
  • win7系统配置php+Apache+mysql环境的方法

    下面是配置win7系统的php+Apache+mysql环境的完整攻略。 准备工作 在开始之前,请确保已经完成以下的准备工作: 下载并安装 Apache、PHP、MySQL。 将安装目录加入环境变量(例如:C:\php, C:\xampp\mysql\bin)。 下载 php.ini 文件并将其复制到 C:\php 目录下。 配置Apache 打开 C:\P…

    PHP 2023年5月23日
    00
  • php中的PHP_EOL换行符详细解析

    下面是关于“php中的PHP_EOL换行符详细解析”的完整攻略: 什么是PHP_EOL换行符 在 PHP 中,PHP_EOL 是一个预定义常量,表示当前系统所采用的换行符。不同的操作系统使用的换行符可能不同,比如 Linux 系统使用的是 \n,而 Windows 系统使用的是 \r\n。PHP_EOL 可以帮助程序在不同的操作系统上都实现正确的换行效果。 …

    PHP 2023年5月23日
    00
  • PHP代码实现表单数据验证类

    下面是PHP代码实现表单数据验证类的完整攻略: 1. 确定验证规则 在创建表单数据验证类之前,首先需要确定需要验证哪些字段,以及需要进行哪些规则的验证。常见的表单数据验证规则包括: 必填字段验证:判断某些字段是否为空或者未填写; 数据格式验证:如email格式验证、电话号码格式验证、身份证号码格式验证、密码复杂度验证等; 数据长度验证:如用户名不能超过20个…

    PHP 2023年5月27日
    00
  • 微信小程序实现下拉加载更多商品

    这里我将以 Markdown 格式进行详细讲解“微信小程序实现下拉加载更多商品”的完整攻略,主要包含以下几个步骤: 在页面中使用 scroll-view 接管滚动事件 在 scroll-view 上绑定触底事件 发送网络请求获取数据 将数据渲染到页面上 每次加载数据时更新分页参数,避免重复请求 以下是完整的实现过程: 步骤一:使用 scroll-view 接…

    PHP 2023年5月23日
    00
  • PHP终止脚本执行的实例代码

    当在PHP脚本中遇到某些错误或条件时,可能需要立即终止脚本的执行。这时可以使用几种不同的方法来停止PHP脚本的执行,下面将详细讲解这些方法的实现方式。 使用die()函数 使用die()函数可以在脚本中任何位置立即停止代码的执行,并向浏览器输出一条消息,通常使用此函数来表明一些错误信息或调试信息。下面是一个简单的示例代码: <?php $num = 1…

    PHP 2023年5月23日
    00
  • 100行PHP代码实现socks5代理服务器

    100行PHP代码实现socks5代理服务器攻略 1. 什么是socks5代理服务器 socks5代理服务器是网络代理服务器的一种,主要功能是实现网络请求的转发和授权认证。它使用Socks5协议作为网络传输协议,支持TCP和UDP协议的代理转发,同时也能够实现用户身份验证功能。 2. 实现原理 socks5代理服务器实现的原理是通过创建一个socket监听端…

    PHP 2023年5月27日
    00
  • PHP实现的62进制转10进制,10进制转62进制函数示例

    下面是完整的攻略讲解: 1. 背景介绍 在许多互联网场景下,我们经常需要对数据进行进制转换,比如将10进制的数字转化为62进制的字符串用于短链生成、url短链接等机制,所以实现一个PHP版的62进制与10进制的相互转换函数就变得尤为必要和实用。 2. 思路分析 实现62进制(支持大小写字母和数字)转10进制的思路是: 首先声明一个函数,以62进制数值和进制数…

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