记录php 生成树

发布时间:2024-01-23 13:16:04

经常用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);
文章来源:https://blog.csdn.net/weixin_42249565/article/details/135767839
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。