- 有时会碰到要将多层节点的数据生成树结构
实现代码如下:
/**
* 生成项目树
* @param $projects
* @param string $idKey
* @param string $pidKey
* @return array
*/
public function makeProjectsTree($projects, $idKey = 'value', $pidKey = 'parentValue')
{
$refer = array();
$tree = array();
foreach($projects as $k => $v){
$refer[$v[$idKey]] = &$projects[$k]; //创建主键的数组引用
}
foreach($projects as $k => $v){
$pid = $v[$pidKey]; //获取当前分类的父级id
if(!$pid){
$tree[] = &$projects[$k]; //顶级栏目
}else{
if(isset($refer[$pid])){
$refer[$pid]['children'][] = &$projects[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
}
}
}
return $tree;
}