- 有時會碰到要將多層節點的數據生成樹結構
實現代碼如下:
/**
* 生成項目樹
* @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;
}