php树型菜单
博客专区 > iturtle 的博客 > 博客详情
php树型菜单
iturtle 发表于3年前
php树型菜单
  • 发表于 3年前
  • 阅读 32
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 通过处理array,添加level,is_leaf属性实现 树型菜单

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


共有 人打赏支持
粉丝 0
博文 21
码字总数 7004
×
iturtle
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: