无极分类属于现在比较难攻克的一关,现在就把代码贴出来,有需要的朋友可以根据实际需要扩展一下。
//假设分类关系为“ 地球”(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 />"; //
}