<?
//測(cè)試數(shù)據(jù)
$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)
);
//排序函數(shù)
function cmd($a,$b) {
if($a[pid]==$b[pid]) return 0;
return $a[pid]>$b[pid]?1:-1;
}
//排序,為避免數(shù)據(jù)中父節(jié)點(diǎn)在子節(jié)點(diǎn)后面出現(xiàn),這種情況在多次修改數(shù)據(jù)后經(jīng)常會(huì)發(fā)生的
//排序的目的就是防止這種情況造成的混亂
uasort($ar,cmd);
//定義目標(biāo)數(shù)組
$d = array();
//定義索引數(shù)組,用于記錄節(jié)點(diǎn)在目標(biāo)數(shù)組的位置
$ind = array();
foreach($ar as $v) {
$v[child] = array(); //給每個(gè)節(jié)點(diǎn)附加一個(gè)child項(xiàng)
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];
}
}
//檢查結(jié)果
print_r($d);
?>
算法特點(diǎn):利用b+樹概念,只用一次循環(huán)就可生成樹形數(shù)組
注冊(cè)會(huì)員,創(chuàng)建你的web開發(fā)資料庫,