无极分类属于现在比较难攻克的一关,现在就把代码贴出来,有需要的朋友可以根据实际需要扩展一下。
//假设分类关系为“ 地球”(id为1,父id为0),“国家”(id为2,父id为1),“省份”(id为5,父id为2),城市(id为9,父id为5),地区(id为14,父id为9)
<?php
//获取子分类function getChildId($parentid=0) //形参传入父id,方便抓取子分类数组。{ mysql_connect("localhost","root",""); mysql_query("set names utf8"); $sql="select * from `category` where parentid='{$parentid}' limit 100"; //从数据表 ·分类· 中,根据父id的值抓取一组子分类。默认值为0,故抓取到的为地球。 $result=mysql_query($sql); $results=array(); //声明一个空数组,方便装入子分类。 while($child=mysql_fetch_assoc($result)) //通过while循环抓取返回给$child { $results[]=$child; //把子分类组里的数据插入到$results这个数组中 } return $results; //把结果返回给函数,默认为一个包含地球的组。}//函数getChildId()返回的是子分类数组
function getTree($parentid=0,$treeArray=array()){ $child = getChild($parentid); //返回的是形参输入的父id下面的子分类组,默认为一个包含国家的组。 foreach($child as $baby) //$baby此时为一个一个的国家 { $treeArray[]=$baby; //将默认传入的一个空数组装入子分类的数据,首先转入的为地球。 $treeArray = getTree($baby['id'],$treeArray); //函数回调,形成一个循环。当$child的值为0时,即父id下面没有子分类时。跳过foreach语句,直接执行下一句 } return $treeArray; //return装着子分类的数组,返回给函数,}//运行函数 返回$treeArray;$tree = getTree();var_dump($tree); ?>下面再来看一段新的代码:
header('Content-Type:text/html;charset=utf-8'); //告诉浏览器用utf-8编码阅读mysql_connect("localhost","root","");
mysql_select_db("cms4");mysql_query("set names utf8");
function getList($pid = 0) //抓取子分类的函数
{ //按新闻分类表的 父id查找 子分类列表 $sql = "select * from news_categorys where pid = '{$pid}' limit 100"; $query = mysql_query($sql); if(!$query) { //有错报错 die(mysql_error()); } $lists = array(); //在结果集里取一行 while($row = mysql_fetch_assoc($query)) { $lists[] = $row; } return $lists;}//获得所有分类的数组
function getTree($pid = 0,$typeTree = array(),$level = 0){
$list = getList($pid); //获取默认父id为0的子分类var_dump($list); //将子分类输出
foreach($list as $l){ //当$list是空数组时,foreach不会执行
$levelStr = '<font color="red">'; for($i=0;$i<$level;$i++){
$levelStr.='|-'; } $levelStr .= '</font>'; //$levelStr = $levelStr.'</font>' $l['name'] = $levelStr.$l['name']; $typeTree[] = $l; //逐层深入递归 $typeTree = getTree($l['id'],$typeTree,$level+1); //获取下一级分类 //$level 指子分类层级 } return $typeTree;}$tree = getTree(); //将所有父和子分类赋值给$tree//var_dump($tree); foreach ($tree as $v) { echo $v["name"]."<br />"; //}