zoukankan      html  css  js  c++  java
  • php中生成树形菜单

    废话不多说!上代码

    class tree
     {
      /**
      * 生成树型结构所需要的2维数组
      * @var array
      */
      var $arr = array();
     
     /**
      * 生成树型结构所需修饰符号,可以换成图片
      * @var array
      */
      var $icon = array('│','├','└');
     
     /**
      * @access private
      */
      var $ret = '';
     
     /**
      * 构造函数,初始化类
      * @param array 2维数组,例如:
      * array(
      *      1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
      *      2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
      *      3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
      *      4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
      *      5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
      *      6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
      *      7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')
      *      )
      */
      function tree($arr=array())
      {
            $this->arr = $arr;
         $this->ret = '';
         return is_array($arr);
      }
     
        /**
      * 得到父级数组
      * @param int
      * @return array
      */
      function get_parent($myid)
      {
       $newarr = array();
       if(!isset($this->arr[$myid])) return false;
       $pid = $this->arr[$myid]['parentid'];
       $pid = $this->arr[$pid]['parentid'];
       if(is_array($this->arr))
       {
        foreach($this->arr as $id => $a)
        {
         if($a['parentid'] == $pid) $newarr[$id] = $a;
        }
       }
       return $newarr;
      }
     
        /**
      * 得到子级数组
      * @param int
      * @return array
      */
      function get_child($myid)
      {
       $a = $newarr = array();
       if(is_array($this->arr))
       {
        foreach($this->arr as $id => $a)
        {
         if($a['parentid'] == $myid) $newarr[$id] = $a;
        }
       }
       return $newarr ? $newarr : false;
      }
     
        /**
      * 得到当前位置数组
      * @param int
      * @return array
      */
      function get_pos($myid,&$newarr)
      {
       $a = array();
       if(!isset($this->arr[$myid])) return false;
             $newarr[] = $this->arr[$myid];
       $pid = $this->arr[$myid]['parentid'];
       if(isset($this->arr[$pid]))
       {
           $this->get_pos($pid,$newarr);
       }
       if(is_array($newarr))
       {
        krsort($newarr);
        foreach($newarr as $v)
        {
         $a[$v['id']] = $v;
        }
       }
       return $a;
      }
     
        /**
      * 得到树型结构
      * @param int ID,表示获得这个ID下的所有子级
      * @param string 生成树型结构的基本代码,例如:"<option value=$id $selected>$spacer$name</option>"
      * @param int 被选中的ID,比如在做树型下拉框的时候需要用到
      * @return string
      */
      function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
      {
       $number=1;
       $child = $this->get_child($myid);
       if(is_array($child))
       {
           $total = count($child);
        foreach($child as $id=>$a)
        {
         $j=$k='';
         if($number==$total)
         {
          $j .= $this->icon[2];
         }
         else
         {
          $j .= $this->icon[1];
          $k = $adds ? $this->icon[0] : '';
         }
         $spacer = $adds ? $adds.$j : '';
         $selected = $id==$sid ? 'selected' : '';
         @extract($a);
         $parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";");
         $this->ret .= $nstr;
         $this->get_tree($id, $str, $sid, $adds.$k.' ',$str_group);
         $number++;
        }
       }
       return $this->ret;
      }
         /**
      * 同上一方法类似,但允许多选
      */
      function get_tree_multi($myid, $str, $sid = 0, $adds = '')
      {
       $number=1;
       $child = $this->get_child($myid);
       if(is_array($child))
       {
           $total = count($child);
        foreach($child as $id=>$a)
        {
         $j=$k='';
         if($number==$total)
         {
          $j .= $this->icon[2];
         }
         else
         {
          $j .= $this->icon[1];
          $k = $adds ? $this->icon[0] : '';
         }
         $spacer = $adds ? $adds.$j : '';
         
         $selected = $this->have($sid,$id) ? 'selected' : '';
         //echo $sid.'=>'.$id.' : '.$selected.' . <br/>';
         @extract($a);
         eval("$nstr = "$str";");
         $this->ret .= $nstr;
         $this->get_tree_multi($id, $str, $sid, $adds.$k.' ');
         $number++;
        }
       }
       return $this->ret;
      }
      
      function have($list,$item){
       return(strpos(',,'.$list.',',','.$item.','));
      }
     }


  • 相关阅读:
    tiny4412 串口驱动分析八 --- log打印的几个阶段之内核启动阶段(printk tiny4412串口驱动的注册)
    tiny4412 串口驱动分析七 --- log打印的几个阶段之内核启动阶段(earlyprintk)
    tiny4412 串口驱动分析六 --- TTY驱动架构
    Android简单的利用SoundPool进行播放铃声的实例代码
    Android简单的利用MediaRecorder进行录音的实例代码
    tiny4412 串口驱动分析五 --- LDD3上TTY驱动程序源码
    tiny4412 串口驱动分析四 --- 修改默认的串口输出
    tiny4412 串口驱动分析三 --- log打印的几个阶段之内核自解压
    tiny4412 串口驱动分析二 --- printk的实现
    tiny4412 串口驱动分析一 --- u-boot中的串口驱动
  • 原文地址:https://www.cnblogs.com/zhujunxxxxx/p/3344862.html
Copyright © 2011-2022 走看看