当前位置:首页 > PHP

php无限分类的实现

2026-01-14 12:40:13PHP

PHP无限分类的实现

无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法:

递归实现法

递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据库表结构通常包含idnameparent_id字段:

CREATE TABLE categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    parent_id INT DEFAULT 0
);

递归查询代码示例:

function getTree($parentId = 0, $level = 0) {
    $tree = [];
    $result = mysqli_query($conn, "SELECT * FROM categories WHERE parent_id = $parentId");

    while ($row = mysqli_fetch_assoc($result)) {
        $row['level'] = $level;
        $tree[] = $row;
        $tree = array_merge($tree, getTree($row['id'], $level + 1));
    }

    return $tree;
}

闭包表(Closure Table)实现

闭包表通过额外的关系表存储节点间的所有路径关系,适合频繁查询的场景:

CREATE TABLE category_closure (
    ancestor INT NOT NULL,
    descendant INT NOT NULL,
    depth INT NOT NULL,
    PRIMARY KEY (ancestor, descendant)
);

查询所有子节点:

$query = "SELECT c.* FROM categories c
          JOIN category_closure cc ON c.id = cc.descendant
          WHERE cc.ancestor = $parentId";

嵌套集模型(Nested Set)

嵌套集通过leftright值表示节点在树中的位置:

ALTER TABLE categories ADD COLUMN lft INT, ADD COLUMN rgt INT;

查询子树:

$query = "SELECT node.* FROM categories node, categories parent
          WHERE node.lft BETWEEN parent.lft AND parent.rgt
          AND parent.id = $parentId
          ORDER BY node.lft";

路径枚举法(Path Enumeration)

通过存储完整路径字符串实现,如1/4/7表示节点7的路径:

ALTER TABLE categories ADD COLUMN path VARCHAR(255);

查询子节点:

$query = "SELECT * FROM categories WHERE path LIKE '$parentPath/%'";

每种方法各有优劣:

  • 递归实现简单但效率较低
  • 闭包表查询高效但写入复杂
  • 嵌套集适合读取频繁场景
  • 路径枚举直观但移动节点成本高

实际选择应根据项目具体需求决定。

php无限分类的实现

标签: php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP…