1.先組裝樹的深度
2.遞歸遍歷樹的深度
控制器代碼
//無限分類樹獲取
$menu = Db::name("rht_first_battalion_cate")->field('id,pid,title')->where('is_del',0)->order('sort desc,id asc')->select();
$getTree = $this->FirstBattalionCateLogic->getTree($menu);
$menuList = $this->FirstBattalionCateLogic->getTreeMenu($getTree);
foreach ($menuList as $men_key=>$men_value){
$menuList[$men_key]['repeat'] = '';
for ($i=1;$i<=$men_value['deep'];$i++){
//格式 ├ 中臺首頁
$menuList[$men_key]['repeat'].= '├ ';
}
$menuList[$men_key]['repeat'] = $menuList[$men_key]['repeat'].$men_value['title'];
}
$this->assign('menuList',$menuList);
邏輯代碼
/**
* 將數組改成樹裝結構
* @param array $data
* @return array
*/
public function getTree(Array $data)
{
$tree = array();
$tmp = array();
foreach ($data as $row){
$tmp[$row['id']] = $row;
}
foreach ($data as $row){
//判斷每個數組的父id 是否存在 $tmp 的數組內
//存在則說明這個數組微其他數組的子元素,不存在關係 pid爲0 即最高子元素
if(isset($tmp[$row['pid']])){
$tmp[$row['pid']]['tree'][]=&$tmp[$row['id']];
}else{
$tree[] = &$tmp[$row['id']];
}
}
return $tree;
}
/**
* 獲取樹狀結構
* @param array $data
* @return array
*/
public function getTreeMenu(Array $tree,$data=array(),&$i=0,$deep=1)
{
foreach ($tree as $val) {
$data[$i] = $val;
$data[$i]['deep'] = $deep;
unset($data[$i]['tree']);
$i++;
if(isset($val['tree']))
{
$data = $this->getTreeMenu($val['tree'],$data,$i,$deep+1);
}
}
return $data;
}