PHP递归方法完美实现获取无限极子栏目功能,带层级输出

在做内容分类的时候往往需要采取子栏目机制,既某个栏目是另一个栏目的子栏目,依次层次可能很多,这时需要通过递归方法来实现获取,MySQL数据库中的数据都是平行的。本文完美实现这种层级关系,并输出层级关系的内容。

先看数据库中的分类结构

QQ截图20170219001659.jpg


第一步:读取数据库内容

header("Content-type:text/html;charset=utf-8");
require('mysql.php');
$con	= new mySQLHelper;
$data	= $con->chaxun('select * from lyg_urlfavorite_type order by tid asc,sort asc,id desc','');


第二步:数据进行递归、层级处理(重点)

//(循环数组,父栏目ID,层次)
function getson($arr,$tid=0,$level){
	static $res;//静态变量 只会被初始化一次
	foreach($arr as $k=>$v){
		$ctid = intval($v['tid']);
		$cid = intval($v['id']);
		if($ctid===$tid){
			$tmp = $v;
			$tmp['levelsign'] = $level;
			$res[] = $tmp;
			getson($arr,$cid,$level+1);
		}
	}
	return $res;
}
//html构造方法
function levelhtml($level=0){
	$x=0;
	$html='';
	while($x<$level){
		$html='—'.$html;
		$x++;
	}
	return $x===0?$html:'|'.$html;
}


第三步:数据美化及输出

$_arr = getson($data,0,0);
$color = array(
	'c0'=>'#000000',
	'c1'=>'#336666',
	'c2'=>'purple',
	'c3'=>'green',
	'c4'=>'red',
	'c5'=>'blue',
);
foreach($_arr as $k=>$v){
	echo "<span style='color:".$color['c'.$v['levelsign']]."'>".levelhtml($v['levelsign']).$v['typename'].'</span><br/>';
}
echo "<br/>";
echo "<select name='typeid'>";
foreach($_arr as $k=>$v){
	echo "<option style='color:".$color['c'.$v['levelsign']]."' value='".$v['id']."'>".levelhtml($v['levelsign']).$v['typename']."</option>";
}
echo "</select>";


最终效果展示

4444.jpg


博主卢雨高原创,转载请带上本文链接。

原文地址:http://luyugao.com/article/623.html