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);
?>
算法特点:利用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);
?>
相关文章推荐
- PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
- php利用array_flip实现数组键值交换去除数组重复值
- PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
- 利用php递归实现无限分类 格式化数组的详解
- 利用ajax实现与php(json数组)数据交互,并局部刷新页面
- php 实现不用递归的树形数组构造函数 无限级分类
- php中循环实现(字符串,对象,或者数组)编码相互转换
- 利用wxsqlite3实现php-sqlite3加密扩展
- 利用PHP和linux shell在ubuntu服务器实现自动端口转发
- HDU2473 - Junk-Mail Filter 利用虚拟数组实现删除并查集的节点
- php利用正则表达式实现手机号码格式验证代码
- PHP - 利用P3P实现跨域
- PHP实现的多维数组去重操作示例
- PHP实现对数组简单求交集,差集,并集功能示例
- php获取数组元素中头一个数组元素值的实现方法
- php获取数组元素中头一个数组元素值的实现方法
- 利用redis和php-resque实现后台任务
- java 利用数组实现增删改查
- 利用指针实现将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中各单元的值。