21,886
社区成员
发帖
与我相关
我的任务
分享
/**
* 将“邻接列表算法”组织的数据转换成树状数组
* @param array 二维数据数组
* @return array 多维树状数组
*/
function tree($arr){
$res = array(); //结果数组
$ind = array(); //索引数组
foreach($arr as $k=>$v) {
list($id, $pid) = array_values($v);
if(isset($ind[$id])){
$ind[$id] = array_merge($v, $ind[$id]);
}else{
$ind[$id] = $v;
}
$ind[$pid]['child'][$id] = &$ind[$id]; //构造索引
if($pid == 0) $res[$id] = &$ind[$id]; //转存根节点组
}
return $res;
}
// 测试用数组
$arr = array(
array('id'=>9, 'pid'=>12,),
array('id'=>10, 'pid'=>13,),
array('id'=>11, 'pid'=>13,),
array('id'=>12, 'pid'=>14,),
array('id'=>14, 'pid'=>0,),
array('id'=>15, 'pid'=>0,),
array('id'=>13, 'pid'=>14,),
array('id'=>17, 'pid'=>15,),
array('id'=>16, 'pid'=>17,),
array('id'=>18, 'pid'=>16,),
array('id'=>19, 'pid'=>15,),
);
$arr = array(
array('id'=>13, 'pid'=>0,),
array('id'=>14, 'pid'=>0,),
array('id'=>9, 'pid'=>12,),
array('id'=>10, 'pid'=>13,),
array('id'=>11, 'pid'=>13,),
array('id'=>12, 'pid'=>14,),
);
/**
* 将“邻接列表算法”组织的数据转换成树状数组
* @param array 二维数据数组
* @param int 要查找的父ID
* @return array 多维树状数组
*/
function tree($arr, $parent_id = 0){
$tmp = array();
foreach($arr as $k=>$v) {
list($id, $pid) = array_values($v);
if(isset($tmp[$id])){
$tmp[$id] = array_merge($v, $tmp[$id]);
}else{
$tmp[$id] = $v;
}
$tmp[$pid]['child'][$id] = &$tmp[$id];
}
$list = array();
if(0 == $parent_id){
$list = $tmp[0]['child'];
}else{
$list = $tmp[$parent_id];
}
unset($tmp);
return $res;
}