马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
理解动态语言的概念,运做机制,熟悉PHP语法算法 <?
//测试数据
$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+树概念,只用一次轮回便可生成树形数组
虽说不上很好,但至少一般的数据操作,再在原有的SQL语言的基础上,用得还是可以的。 |