>  기사  >  백엔드 개발  >  树形算法_PHP教程

树形算法_PHP教程

WBOY
WBOY원래의
2016-07-13 17:28:02729검색

//测试数据 $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+树概念,只用一次循环就可生成树形数组

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/531826.htmlTechArticle1,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), a...
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.