Heim >php教程 >php手册 >php实现无限级分类,php实现级分类

php实现无限级分类,php实现级分类

WBOY
WBOYOriginal
2016-06-13 09:18:06884Durchsuche

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'],'
';
}

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));

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn