一次查询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/>‘; }
程序来自网络收集----
时间: 2024-10-31 12:10:33