php两种无限分类方法实例


  本文标签:php,无限分类方法

一、递归方法

复制代码 代码如下:

$items = array(
array(id=>1,pid=>0,name=>一级11),
array(id=>2,pid=>0,name=>一级12),
array(id=>3,pid=>1,name=>二级21),
array(id=>4,pid=>3,name=>三级31),
array(id=>5,pid=>1,name=>二级22),
array(id=>6,pid=>3,name=>三级32),
array(id=>7,pid=>6,name=>四级41),
);
$i = 0;
function formatTree($arr, $pid = 0){
$tree = array();
$temp = array();
global $i;
if($arr){
foreach($arr as $k=>$v){
if($v[pid] == $pid){//
$temp = formatTree($arr, $v[id]);
$temp && $v[son] = $temp;
$tree[] = $v;
}
}
}
return $tree;
}
print_r(formatTree($items));

二、非递归方法
复制代码 代码如下:

function genTree($items) {
    $tree = array(); //格式化好的树
    foreach ($items as $item)
        if (isset($items[$item[pid]])){
            $items[$item[pid]][son][] = &$items[$item[id]];
        }
        else{
            $tree[] = &$items[$item[id]];
        }
    return $tree;
}

$items = array(
    1 => array(id => 1, pid => 0, name => 一级11),
    2 => array(id => 2, pid => 1, name => 二级21),
    3 => array(id => 3, pid => 1, name => 二级23),
    4 => array(id => 4, pid => 9, name => 三级31),
    5 => array(id => 5, pid => 4, name => 四级43),
    6 => array(id => 6, pid => 9, name => 三级32),
    7 => array(id => 7, pid => 4, name => 四级41),
    8 => array(id => 8, pid => 4, name => 四级42),
    9 => array(id => 9, pid => 1, name => 二级25),
    10 => array(id => 10, pid => 11, name => 二级22),
    11 => array(id => 11, pid => 0, name => 一级12),
    12 => array(id => 12, pid => 11, name => 二级24),
    13 => array(id => 13, pid => 4, name => 四级44),
    14 => array(id => 14, pid => 1, name => 二级26),
    15 => array(id => 15, pid => 8, name => 五级51),
    16 => array(id => 16, pid => 8, name => 五级52),
    17 => array(id => 17, pid => 8, name => 五级53),
    18 => array(id => 18, pid => 16, name => 六级64),
);
print_r(genTree($items));