无限分类之无限方法_无需整理

一次查询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('|&nbsp;',$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('|&nbsp;',$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('|&nbsp;',$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('|&nbsp;',$level).'|-'.$v['name'].'<br/>';
}

程序来自网络收集----

转载于:https://my.oschina.net/Majw/blog/490722

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值