PHP无限极分类

本文介绍了一种使用PHP实现无限级分类的方法,包括数据库设计、递归获取子类及父类的函数,并提供了示例代码及展示效果。

PHP无限级分类实现。。。。。。

1,数据库设计:

185919_cQuB_1156660.png

185948_ZSNu_1156660.png

2,代码:

/**
 * @author koma
 * @todo   PHP无限极分类
 */
$cn = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db('t', $cn) or die(mysql_error());
mysql_query('set names utf8');

/**
 * 从顶层逐级向下获取子类
 * @param number $pid
 * @param array $lists
 * @param number $deep
 * @return array
 */
function getLists($pid = 0, &$lists = array(), $deep = 1) {
	$sql = 'SELECT * FROM category WHERE pid='.$pid;
	$res = mysql_query($sql);
	while ( ($row = mysql_fetch_assoc($res)) !== FALSE ) {
		$row['catename'] = str_repeat('   ', $deep).'|---'.$row['catename'];
		$lists[] = $row;
		getLists($row['id'], $lists, ++$deep); //进入子类之前深度+1
		--$deep; //从子类退出之后深度-1
	}
	return $lists;
}

function displayLists($pid = 0, $selectid = 1) {
	$result = getLists($pid);
	$str = '<select>';
	foreach ( $result as $item ) {
		$selected = "";
		if ( $selectid == $item['id'] ) {
			$selected = 'selected';
		}
		$str .= '<option '.$selected.'>'.$item['catename'].'</option>';
	}
	return $str .= '</select>';
}
/**
 * 从子类开始逐级向上获取其父类
 * @param number $cid
 * @param array $category
 * @return array:
 */
function getCategory($cid, &$category = array()) {
	$sql = 'SELECT * FROM category WHERE id='.$cid.' LIMIT 1';
	$result = mysql_query($sql);
	$row = mysql_fetch_assoc($result);
	if ( $row ) {
		$category[] = $row;
		getCategory($row['pid'], $category);
	}
	krsort($category); //逆序,达到从父类到子类的效果
	return $category;
}

function displayCategory($cid) {
	$result = getCategory($cid);
	$str = "";
	foreach ( $result as $item ) {
		$str .= '<a href="'.$item['id'].'">'.$item['catename'].'</a>>';
	}
	return substr($str, 0, strlen($str) - 1);
}

echo displayLists(0, 3);

echo displayCategory(13);

3,效果图:

190102_gllP_1156660.png


转载于:https://my.oschina.net/u/1156660/blog/341199

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值