PHP 类别分类级子分类的列出

 
<?php


global $mysqli; 
global $count;
$count=0;
 $mysqli = new MySQLi("localhost","root","","bbs");
 
 $mysqli->set_charset("utf8");

/*
	数据库信息  表名: category
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| cat_id    | int(10)     | NO   | PRI | NULL    | auto_increment |
| name      | varchar(50) | NO   |     | NULL    |                |
| parent_id | int(10)     | NO   |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
		SQL 语句查询出来所以 parent_id=0 的信息, parent_id =0 表明这个一个最高分类,下面还可能有
		好多个 子分类
*/ 
 $sql ="select * from category where parent_id=0";   
 

 
 
 $result =$mysqli->query($sql);
 $cat_arr =array();
 while($row =$result->fetch_assoc())
 {
	 	$cat_arr[$row['cat_id']]['id']=$row['cat_id'];
		$cat_arr[$row['cat_id']]['name']=$row['name'];
		$cat_arr[$row['cat_id']]['parent_id']=$row['parent_id'];
		
		/*
				将查询出来的一个信息都存储在 $cat_arr 中,如果这个信息的存在,就去寻找 
				以这个信息的 cat_id 为 parent_id 的所有的信息,而这个任务则去交给了
				getChild() 方法去完成,将得到的所有的子分类都以 $cat_arr['cat_id']['child']为索引添加到
				数组里面去.
				在得到的数组中,每一行包含了  cat_id , name parent_id  三个字段,这是所有行都包含的
				而如果这一行 中的 child 字段不为空的话,那么就说明以这个 cat_id ,其还有子分类 ,那么
				就要递规调用里面所有的子分类
		*/
		if(isset($row['cat_id'])!=NULL)
		{
			$cat_arr[$row['cat_id']]['child']=getChild($row['cat_id']);
		}
}

foreach($cat_arr as $value)
{
	//var_dump ($value['name']);
	echo $value['name']."</br>";
	//var_dump($value['cat_id']);
	listcat($value['child'],2);
	/*foreach($value['cat_id'] as $v)
	{
		var_dump($v['name']);
	}*/
	
}
function listcat($array,$level)
{
	if(!empty($array))
	{
		foreach($array as $value)
		{
			//var_dump($value['cat_id']);
			echo getLevel($level);
			echo $value['name']."</br>";
			listcat($value['child'],$level+2);
			
		}
	}
}
 /*
 	使各类别显示出来各级关系,所以在每个子级分类显示前加入空格
 */
 function getlevel($level)   
 {
	 $str=NULL;
	 for($i=0;$i<$level;$i++)
	 {
		 	$str.="  ";      
	 }
	  $str.="|--";
	  return $str;
	 }
function getChild($id)
{
	global $mysqli;
	$sql ="select * from category where parent_id=".$id;
	$result =$mysqli->query($sql);
	 $cat_arr=array();
	while($row = $result->fetch_assoc())
	{
		$cat_arr[$row['cat_id']]['id']=$row['cat_id'];
		$cat_arr[$row['cat_id']]['name']=$row['name'];
		$cat_arr[$row['cat_id']]['parent_id']=$row['parent_id'];
		if(isset($row['cat_id'])!=NULL)
		{
			$cat_arr[$row['cat_id']]['child']=getChild($row['cat_id']);
		}
	}
	
	return $cat_arr;
	
}

			/*
							运行效果
							
							
					教育
						|--大学
							|--南阳理工
								|--计算机系
						|--中学
						|--小学
					衣服
						|--帽子
						|--衬衫
						|--鞋子
							|--耐克
			*/



?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值