项目中遇到需要实现多级分类的功能,刚开始想通过静态数据的方法,但是后来发现分类需要添加编辑功能,而且当分类很多的时候管理起来也不方便,于是乎就想到了使用数据库的方法。
tbl_category
id int not null auto_increment
cat_id int not null
cat_name varchar not null
parent_id int not null
- 如果parent_id为0说明该分类是顶级父节点
- 如果parent_id不为0说明为孩子节点
- 如果cat_id不属于parent_id,说明为叶子节点
首先获取顶级父节点
根据顶级父节点获取子节点
遍历所有子节点,如果当前节点有孩子节点
先把当前孩子节点找出来
再把当前孩子节点的孩子节点找出来
不断重复此步骤,递归实现
否则不做处理
$rootArr = getRootCategory();
getChildren($rootArr);
function getChildren(& $rootArr) { foreach ($rootArr as &$row) { if (haveChildren($row['cat_id'])) { $row['children'] = getChildren($row['cat_id']); getChildren($row['children']); } } }