应用场景
导航栏分类(如商品、课程、城市等)文件夹数据库设计
主要的三个字段:主键id、父级id、名称title。
CREATE TABLE `t_cate` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL COMMENT '父级id',
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
数据表数据
逻辑
判断依据是:子类的父级id是否等于父级的id
代码实现
// 连接数据库
$db = mysqli_connect('127.0.0.1','root','123456','test');
$sql = 'SELECT * FROM t_cate';
$exe_res = mysqli_query($db, $sql);
$data = mysqli_fetch_all($exe_res,MYSQLI_ASSOC);
// print_r($data);
// 循环 判断 递归
function getTree($arr,$pid=0,$level=1){
static $list = [];
foreach ($arr as $key => $value) {
// 判断子类的父级id 是否等于 父级的id
if($value['pid'] == $pid){
$value['level'] = $level;
$list[] = $value;
unset($arr[$key]); // 删除已排好的数据,减少循环次数
getTree($arr,$value['id'],$level+1); // 递归函数
}
}
return $list;
}
结果展示
这只是简单的实现无限分类功能,虽然在项目开发中还会有其他细节要注意,但是逻辑思路都是一样的。
「实例」php打印星星金字塔