PHP之Category类库 无限分类

1. 什么是无限分类

无限分类又称为多级分类,是指在一个分类表中,每个分类都可以有无限的下级分类,形成一个树状结构。

2. 数据表结构

我们先来看一下无限分类所需要的数据表结构:

CREATE TABLE `categories` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL,

`parent_id` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

其中,id为自增主键,name为分类名称,parent_id为父级分类的id,如果当前分类没有父级分类,则parent_id字段为NULL。

3. 实现方法

3.1. 获取所有分类

$categories = \DB::table('categories')->select('id', 'name', 'parent_id')->get();

使用Laravel框架自带的查询构建器来获取数据库中的所有分类,其中select()方法用于指定查询的字段,get()方法用于获取所有分类记录,具体操作详见Laravel官方文档。

3.2. 构建分类树

/**

* 构建分类树

*

* @param array $categories 所有分类数组

* @param int $parentId 父级分类id

* @return array

*/

public function buildCategoryTree(array $categories, int $parentId = 0)

{

$result = [];

foreach ($categories as $category) {

if ($category->parent_id === $parentId) {

$children = $this->buildCategoryTree($categories, $category->id);

if (!empty($children)) {

$category->children = $children;

}

$result[] = $category;

}

}

return $result;

}

在构建分类树的方法中,我们首先初始化一个空数组$result,然后使用foreach循环遍历所有分类,当当前分类的parent_id等于指定的parentId时,将该分类加入数组$result中,然后递归调用构建分类树的方法,将当前分类的id作为parentId传入,获取它的子分类,如果有子分类,则将子分类挂在当前分类的children属性上,最后返回结果数组。

3.3. 实例化Category类

$categories = \DB::table('categories')->select('id', 'name', 'parent_id')->get();

$category = new Category();

$categoryTree = $category->buildCategoryTree($categories);

首先使用查询构建器获取所有分类,然后实例化Category类,调用buildCategoryTree()方法,将所有分类作为参数传入,即可获取一个以树形结构组织的分类数组$categoryTree。

4. 小结

通过以上方法,我们就可以快速、简便地实现无限分类功能。在实际应用中,我们可以使用分类树来构建商品分类、新闻分类等功能。

后端开发标签