php树型菜单

通过处理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());

    页面处理

<select class="form-control" name="term_id" style="width:500px"> 
<foreach name="termpid" item="v">
<option value="	{$v['term_id']}" <if condition="$v['term_id']  eq  $vo['term_id'] ">selected</if>>
<?php for ($i=1;$i<$v['term_level'];$i++){ ?>
&nbsp;
<?php } ?>
{$v['term_name']}</option>
</foreach>
</select>


转载于:https://my.oschina.net/gKWW0kOYB/blog/344762

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值