通过处理array,添加level,is_leaf属性实现 树型菜单
公共类
通过处理array,添加level,is_leaf属性实现 树型菜单
/*树形分类添加节点属性
*$data, 要处理的节点数组
*$pid,父类ID
*$prefix, 字段前缀 如chh_pid
*$tree array()
**/
function getTree($data, $pid,$prefix,$tree) {
foreach($data as $k => $v)
{
$v[$prefix.'level'] = getLevel($data,$pid,1,$prefix); //为每个节点计算层级
if(hashChild($data,$v[$prefix.'id'],$prefix)){//判断每个节点是否有子节点
$v['is_leaf'] =1;
}else{
$v['is_leaf'] =0;
}
if($v[$prefix.'pid'] == $pid)
{
if(count($tree)==0){
$tree[] = $v;
}else{
array_push($tree, $v);
}
if(!empty($v[$prefix.'id']))
$tmp = getTree($data, $v[$prefix.'id'],$prefix);//递归查找子节点
if(count($tmp)>0){
foreach ($tmp as $key => $value) {
array_push($tree, $value);
}
}
}
}
return $tree;
}
/** 判断是否有子节点
*$data, 要处理的节点数组
*$pid,父类ID
*$prefix, 字段前缀 如chh_pid
*/
function hashChild($data,$id,$prefix) {
foreach($data as $k => $v){
if($v[$prefix.'pid'] == $id){
return true;
}
}
return false;
}
/** 获取等级
*$data, 要处理的节点数组
*$pid,父类ID
*$prefix, 字段前缀 如chh_pid
*/
function getLevel($data,$id,$level,$prefix) {
if($level>100) return $level;
foreach($data as $k => $v){
if($v[$prefix.'id']==$id){
$re = $v[$prefix.'pid'];
$level++;
if(!empty($v[$prefix.'pid']))
$level =getLevel($data,$re,$level);
}
}
return $level;
}
调用:
$lst=$Term ->field('term_id,term_name,term_pid') ->order('term_pid asc ,term_order asc')-> select();
$lst= getTree($lst,0,'term_',array());
页面处理
selected>
{$v['term_name']}