PHP树-不需要递归的实现方法
PHP树-不需要递归的实现方法
/**
*创建父节点树形数组
*参数
*$ar数组,邻接列表方式组织的数据
*$id数组中作为主键的下标或关联键名
*$pid数组中作为父键的下标或关联键名
*返回多维数组
**/
functionfind_parent($ar,$id='id',$pid='pid'){
foreach($aras$v)$t[$v[$id]]=$v;
foreach($tas$k=>$item){
if($item[$pid]){
if(!isset($t[$item[$pid]]['parent'][$item[$pid]]))
$t[$item[$id]]['parent'][$item[$pid]]=&$t[$item[$pid]];
}
}
return$t;
}
/**
*创建子节点树形数组
*参数
*$ar数组,邻接列表方式组织的数据
*$id数组中作为主键的下标或关联键名
*$pid数组中作为父键的下标或关联键名
*返回多维数组
**/
functionfind_child($ar,$id='id',$pid='pid'){
foreach($aras$v)$t[$v[$id]]=$v;
foreach($tas$k=>$item){
if($item[$pid]){
$t[$item[$pid]]['child'][$item[$id]]=&$t[$k];
}
}
return$t;
}
$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'=>'儿子'),
);
$p=find_parent($data,'ID','PARENT');
$c=find_child($data,'ID','PARENT');
Print_r($c);
执行效果:
Array ( [1]=>Array ( [ID]=>1 [PARENT]=>0 [NAME]=>祖父 [child]=>Array ( [2]=>Array ( [ID]=>2 [PARENT]=>1 [NAME]=>父亲 [child]=>Array ( [4]=>Array ( [ID]=>4 [PARENT]=>2 [NAME]=>自己 [child]=>Array ( [5]=>Array ( [ID]=>5 [PARENT]=>4 [NAME]=>儿子 ) ) ) ) ) [3]=>Array ( [ID]=>3 [PARENT]=>1 [NAME]=>叔伯 ) ) ) [2]=>Array ( [ID]=>2 [PARENT]=>1 [NAME]=>父亲 [child]=>Array ( [4]=>Array ( [ID]=>4 [PARENT]=>2 [NAME]=>自己 [child]=>Array ( [5]=>Array ( [ID]=>5 [PARENT]=>4 [NAME]=>儿子 ) ) ) ) ) [3]=>Array ( [ID]=>3 [PARENT]=>1 [NAME]=>叔伯 ) [4]=>Array ( [ID]=>4 [PARENT]=>2 [NAME]=>自己 [child]=>Array ( [5]=>Array ( [ID]=>5 [PARENT]=>4 [NAME]=>儿子 ) ) ) [5]=>Array ( [ID]=>5 [PARENT]=>4 [NAME]=>儿子 ) )
以上这篇PHP树-不需要递归的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。