PHP无限极分类

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

1,数据库设计:

PHP无限极分类

PHP无限极分类

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,效果图:

PHP无限极分类


你可能感兴趣的:(PHP无限极分类)