php树菜单转化为一维菜单,php树型菜单 - iturtle的个人空间 - OSCHINA - 中文开源技术交流社区...
通過處理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']}
總結
以上是生活随笔為你收集整理的php树菜单转化为一维菜单,php树型菜单 - iturtle的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 参数变化_风机盘管参数变化对性能造成的影
- 下一篇: PHP 表单文件上传的原理,php多文件