您的位置:首页 > 编程语言 > PHP开发

PHP利用b+树概念实现树形数组

2010-06-12 18:44 225 查看
PHP利用b+树概念实现树形数组

算法特点:利用b+树概念,只用一次循环就可生成树形数组

<?

//测试数据

$ar = array(

array(id=>1,pid=>0),

array(id=>2,pid=>0),

array(id=>3,pid=>2),

array(id=>4,pid=>0),

array(id=>5,pid=>3),

array(id=>6,pid=>1),

array(id=>7,pid=>1),

array(id=>8,pid=>6),

array(id=>9,pid=>7),

array(id=>10,pid=>9)

);

//排序函数

function cmd($a,$b) {

if($a[pid]==$b[pid]) return 0;

return $a[pid]>$b[pid]?1:-1;

}

//排序,为避免数据中父节点在子节点后面出现,这种情况在多次修改数据后经常会发生的

//排序的目的就是防止这种情况造成的混乱

uasort($ar,cmd);

//定义目标数组

$d = array();

//定义索引数组,用于记录节点在目标数组的位置

$ind = array();

foreach($ar as $v) {

$v[child] = array(); //给每个节点附加一个child项

if($v[pid] == 0) {

$i = count($d);

$d[$i] = $v;

$ind[$v[id]] =& $d[$i];

}else {

$i = count($ind[$v[pid]][child]);

$ind[$v[pid]][child][$i] = $v;

$ind[$v[id]] =& $ind[$v[pid]][child][$i];

}

}

//检查结果

print_r($d);

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: