一次查询N次递归 方法一
测试数据 点我
//获取所有的数据
$pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root','root');
$stmt = $pdo->query("select * from cate2");
$data = $stmt->fetchAll(2);
function getcate4($data,$pid = 0,$level=0){
$level++;
$cateArr = array();
//遍历数据
foreach($data as $v){
if($v['pid'] == $pid){ //把当前父id下的分类存到$cateArr中
$v['level'] = $level; //把深度(层数)一起存到$cateArr中
$cateArr[] = $v;
//查看这个分类 是否有 子分类 如果有继续加入到 $cateArr
$cateArr = array_merge($cateArr,getcate4($data,$v['id'],$level));
}
}
//返回当前的分类数据
return $cateArr;
}
$getArr = getcate4($data);
foreach($getArr as $v){
echo str_repeat('| ',$v['level']).'|-'.$v['name'].'<br />';
}
方法二 一次递归N次查询(仅供参考)
function getcate3($pid=0,$level=0){
$cateArr = array();
$level++;
$pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root','root');
//第一次pid为0 的时候查的是根分类
$stmt = $pdo->query("select * from cate2 where pid={$pid}");
$data = $stmt->fetchAll(2);
foreach($data as $v){
$v['level'] = $level;
$cateArr[] = $v;
$cateArr=array_merge($cateArr, getcate3($v['id'],$level));
}
return $cateArr;
}
$data = getcate3();
foreach($data as $v){
echo str_repeat('| ',$v['level']).'|-'.$v['name'].'<br />';
}
方法三 一次查询遍历分类 (三个字段)
function getcate2($pid=0,$level=0){
$level++;
$pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root','root');
//第一次pid为0 的时候查的是根分类
$stmt = $pdo->query("select * from cate2 where pid={$pid}");
$data = $stmt->fetchAll(2);
foreach($data as $v){
echo str_repeat('| ',$level).'|-'.$v['name'].$v['id'].'<br />';
//把第一个根分类的id传到下一次
//下一次查询二级分类
getcate2($v['id'],$level);
}
}
getcate2();
方法四 最简单无限分类
function getcate1(){
$pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root','root');
$stmt = $pdo->query("SELECT *,concat(path,',',id) as fullpath FROM `cate1` order by fullpath;");
return $stmt->fetchAll(2);
}
$data = getcate1();
foreach($data as $v){
$level = substr_count($v['fullpath'],',');
echo str_repeat('| ',$level).'|-'.$v['name'].'<br/>';
}