PHP递归实现无限级分类详解

季宁
季宁
发布时间:2026-10-13| 6人浏览过
原创

本文介绍如何利用PHP递归函数配合自关联数据库表实现无限级分类功能,通过将层级数据转换为带缩进符号的HTML下拉选项,适用于地区或商品分类展示。

结果与目标

实现一个能处理任意层级深度的分类列表,并在前端以树状缩进形式展示。核心目标是解决已知父子关系但层级不确定的数据结构在Web端的直观呈现问题。

准备条件

需要建立一个支持自关联(Self-Join)的数据表。通常包含以下三个关键字段:

  • id:唯一标识符,主键。
  • name:分类名称。
  • parentId:父级分类ID,顶级分类通常为0或NULL。

真实操作顺序

第1步:构建数据库表结构

目的:确立数据存储的基础 schema。使用 MyISAM 或 InnoDB 引擎均可,这里以常见的 MyISAM 为例,字符集建议使用 utf8 以兼容中文。

CREATE TABLE IF NOT EXISTS `city` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(30) character set utf8 collate utf8_unicode_ci NOT NULL default '0',
  `parentId` int(11) NOT NULL default '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

第2步:封装数据库连接类

目的:提供获取数据的方法。假设存在一个名为 DB 的类,初始化时需要传入主机、用户、密码、端口、数据库名和字符集。

$db=new DB($Config['host'],$Config['user'],$Config['password'],$Config['port'],$Config['db'],$Config['charset']);

第3步:编写递归查询函数

目的:通过递归调用自身,逐层向下检索子节点,并输出带有视觉层级的HTML选项。

入口:调用 findCity('city'),默认从 id=0(根节点)开始,级别为1。

关键参数说明:

  • $table:表名,如 'city'。
  • $id:当前查询的父级ID,默认为0。
  • $level:当前层级深度,用于控制缩进长度。

完整代码实现如下:

function findCity($table,$id=0,$level=1){
  global $db;
  // 查询当前层级的所有直接子项
  $findSql="select id,name,parentId from $table where parentId={$id} order by id";
  $findResult=$db->getArray($findSql);
  $num=$db->numRows;
  
  // 生成缩进符号,层级每深一级增加 "--"
  $logoStr="|";
  for($i=0;$i<$level;$i++){
    $logoStr.="--";
  }
   
  if($num!=0){
    for($j=0;$j<$num;$j++){
      // 输出HTML option 标签,包含缩进和前缀
      echo "<option value={$findResult[$j]['id']}>{$logoStr}{$findResult[$j][name]}</option>";
        // 递归调用:将当前子项ID作为下一层的父ID
        findCity($table,$findResult[$j]['id'],$level+1);
    }
  }
}
// 启动递归
findCity('city');

第4步:理解完成判断状态

当 $num == 0 时,表示当前路径下没有更深的子节点,递归结束,返回上一层。最终所有符合条件的节点都会以平铺但带缩进的HTML格式输出到浏览器。

简要总结

以上是关于PHP简单实现无限级分类的详细方法,该方法利用简单的递归逻辑解决了树形数据的遍历与展示问题,更多关于PHP数据结构优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。