首页 / 网页编程 / PHP / php实现无限级分类
复制代码 代码如下:
$area = array(
array("id"=>1,"name"=>"安徽","parent"=>0),
array("id"=>2,"name"=>"海淀","parent"=>7),
array("id"=>3,"name"=>"濉溪县","parent"=>5),
array("id"=>4,"name"=>"昌平","parent"=>7),
array("id"=>5,"name"=>"淮北","parent"=>1),
array("id"=>6,"name"=>"朝阳","parent"=>7),
array("id"=>7,"name"=>"北京","parent"=>0),
array("id"=>8,"name"=>"上地","parent"=>2)
);
1.递归,查找子孙树
复制代码 代码如下:
function subtree($arr,$id=0,$lev=1) {
$subs = array(); // 子孙数组
foreach($arr as $v) {
if($v["parent"] == $id) {
$v["lev"] = $lev;
$subs[] = $v; // 举例说找到array("id"=>1,"name"=>"安徽","parent"=>0),
$subs = array_merge($subs,subtree($arr,$v["id"],$lev+1));
}
}
return $subs;
}
$tree = subtree($area,0,1);
foreach($tree as $v) {
echo str_repeat(" ",$v["lev"]),$v["name"],"<br />";
}
2.递归,求家谱树
家谱树的应用 ,如面包屑导航 首页 > 手机类型 > CDMA手机 > 公益PHP > 递归应用
复制代码 代码如下:
function familytree($arr,$id) {
$tree = array();
foreach($arr as $v) {
if($v["id"] == $id) {// 判断要不要找父栏目
if($v["parent"] > 0) { // parnet>0,说明有父栏目
$tree = array_merge($tree,familytree($arr,$v["parent"]));
}
$tree[] = $v; // 以找到上地为例
}
}
return $tree;
}
print_r(familytree($area,8)); // 北京->海淀->上地
2.迭代,求家谱树
复制代码 代码如下:
// 迭代,效率比递归高,代码也没多.
// 找家谱树推荐用迭代
function tree($arr,$id) {
$tree = array();
while($id !== 0) {
foreach($arr as $v) {
if($v["id"] == $id) {
$tree[] = $v;
$id = $v["parent"];
break;
}
}
}
return $tree;
}
print_r(tree($area,8));