无限分类之无限方法

一次查询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/>‘;
}

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

时间: 2024-10-31 12:10:33

无限分类之无限方法的相关文章

深度实现session【包括session入库、session机制和session和cookie的使用方法,完善会话机制(在分布式机器中也能使用)】、无限分类的实现

1.session的注意点:@session_start();//这个配置需要注意,session开启中会有影响,所以使用错误抑制符进行限制[并且使用php.ini对session进行自动开启] session_start()前的输出问题:[session信息本身会增加到http头信息,也就是http主体不能在头前]对php.ini中的输出缓存进行配置,out_buffer的配置[注意:开启之后能够保证输出内容在脚本中缓存] [注意](1)脚本中session变量的键只能是字符串类型的[$_SE

PHP通过传引用的思想实现无限分类的方法

在我的Simpla中,用到了无限分类,使用了PHP的传引用思想实现无限分类的方法,可以完美展示类似这样的分类模式. 具体实现代码如下:如有错误或者更好的方法,希望可以相互交流. id   pid   name 1    0     四川 2    0     重庆 3    1     成都 4    1     绵阳 5    3     高新区 /**      * 数组变成无限级分类--传引用思想      * @param array $items      * @return arra

PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂

当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱,代码很多,让我们怎么学习嘛,那些都不靠谱,还是自己捣鼓捣鼓无限极分类了. 比如一个category表:有id, name, pid, sort 就这四个简单的字段,不要太复杂了. id    name          pid      sort1     PHP           0   

PHP无限分类树算法相关

一.找儿子 1.引用算法找儿子 /**  * 创建子节点树形数组  * 参数  * $ar 数组,邻接列表方式组织的数据  * $id 数组中作为主键的下标或关联键名  * $pid 数组中作为父键的下标或关联键名  * 返回 多维数组  **/ function find_child($ar, $id='id', $pid='pid') {     foreach($ar as $v) $t[$v[$id]] = $v;     foreach ($t as $k => $item){    

php不用递归完成无限分类,从表设计入手完整演示过程

无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, 首先我们先做视图界面, <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>白超华-博客园</title> &

无限分类1

连接上一个 无限分类 一.新建一个商品表 cid对应上面的ID 二. //获取所有的数据 $pdo = new PDO("mysql:host=localhost;dbname=lamp108",'root',''); $pdo->query("set names gbk"); $stmt = $pdo->query("select * from cate2"); $data = $stmt->fetchAll(2); func

无限分类树操作

获取相应分类id的分类树: public static function getCategoryTree($id){ //$model=M('category'); if($id>0){ $obj=self::selectTable('category',array('id'=>$id),true);//$model->where(array('id'=>$id))->find(); if(!is_null($obj)){ $childList=self::selectTab

php基于左右值排序的无限分类算法

PHP无限分类[左右值]算法 <?php /** * 基于左右值排序的无限分类算法 * 数据库结果为 CREATE TABLE om_catagory ( CatagoryID int(10) unsigned NOT NULL auto_increment, Name varchar(50) default '', Lft int(10) unsigned NOT NULL default '0', Rgt int(10) unsigned NOT NULL default '0', PRIM

递归无限分类笔记

最近项目都上线了每天巩固一下php知识,下面是关于递归无限分类的比较供大家参考! 数据库一个表就可以了,增加一个parendid字段 也就是子级分类 ,排序大家也可以加一下字段. CREATE TABLE `category` (   `id` int(11) NOT NULL,   `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,   `sort_order` int(11) DEFAULT NULL,   `parendid` int(