经常用php 生成树形结构,这里记录一遍
有两种方法
如果数据在几十条建议使用 递归调用。方便调整数据
如果数据大于100条,建议使用引用,然后返回到前端。通过前台递归循环动态修改数据。
function tree1($ar, $id='id', $pid='pid')
{
$t=[];$tree=[];
foreach ($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $key => $item) {
if (isset($t[$item[$pid]])) {
$t[$item[$pid]]['children'][] = &$t[$key];
} else {
$tree[] = &$t[$key];
}
}
return $tree;
}
function tree2($array, $id='id', $fu='fid',$pid=0,$level=1){
$tree = [];
foreach ($array as $key => $value) {
if ($value[$fu] == $pid) {
$value['children'] = tree2($array,$id,$fu,$value[$id],$level+1);
$value['level']=$level;
$tree[] = $value;
}
}
return $tree;
}
$data = array(
array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
);
$c = tree1($data, 'ID', 'PARENT');
$t1=microtime();
Print_r($c);
$t2=microtime();
var_dump($t1);
var_dump($t2);
$c = tree2($data, 'ID', 'PARENT');
$t3=microtime();
Print_r($c);
$t4=microtime();
var_dump($t3);
var_dump($t4);