加入收藏 | 设为首页 | 会员中心 | 我要投稿 十堰站长网 (https://www.0719zz.com/)- 混合云存储、网络、视频终端、云计算、媒体处理!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP实现无限级分类(递归方法)

发布时间:2023-02-16 13:58:52 所属栏目:PHP 来源:互联网
导读:实现代码: ?PHP include(tree.class.PHP); //具有这个结构的数组,不是这样的话,可以改类的实现 $list = array( 1 = array(id = 1,pid = 0,name = 一级栏目一), 2 = array(id = 2,name = 一级栏目二), 3 = array(id = 3,pid = 1,name = 二级栏目一), 4 = a

 
  $this->ret .= $nstr;
 
  $nbsp = $this->nbsp;
 
  $this->get_tree($id,$sid,$adds.$k.$nbsp,$str_group);
 
  $number++;
 
  }
 
  }
 
  return $this->ret;
 
  }
 
      /**
 
  * 同上一方法类似,但允许多选
 
  */
 
  public function get_tree_multi($myid,$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' : '';
 
  @extract($a);
 
  eval("$nstr = "$str";");
 
  $this->ret .= $nstr;
 
  $this->get_tree_multi($id,$adds.$k.' ');
 
  $number++;
 
  }
 
  }
 
  return $this->ret;
 
  }
 
  /**
 
  * @param integer $myid 要查询的ID
 
  * @param string $str   第一种HTML代码方式
 
  * @param string $str2  第二种HTML代码方式
 
  * @param integer $sid  默认选中
 
  * @param integer $adds 前缀
 
  */
 
  public function get_tree_category($myid,$str2,$id) ? 'selected' : '';
 
  @extract($a);
 
  if (empty($html_disabled)) {
 
  eval("$nstr = "$str";");
 
  } else {
 
  eval("$nstr = "$str2";");
 
  }
 
  $this->ret .= $nstr;
 
  $this->get_tree_category($id,$adds.$k.' ');
 
  $number++;
 
  }
 
  }
 
  return $this->ret;
 
  }
 
  /**
 
  * 同上一类方法,jquery treeview 风格,可伸缩样式(需要treeview插件支持)
 
  * @param $myid 表示获得这个ID下的所有子级
 
  * @param $effected_id 需要生成treeview目录数的id
 
  * @param $str 末级样式
 
  * @param $str2 目录级别样式
 
  * @param $showlevel 直接显示层级数,其余为异步显示,0为全部限制
 
  * @param $style 目录样式 默认 filetree 可增加其他样式如'filetree treeview-famfamfam'
 
  * @param $currentlevel 计算当前层级,递归使用 适用改函数时不需要用该参数
 
  * @param $recursion 递归使用 外部调用时为FALSE
 
  */
 
      function get_treeview($myid,$effected_id='example',$str="<span class='file'>$name</span>",$str2="<span class='folder'>$name</span>",$showlevel = 0,$filetree ',$currentlevel = 1,$recursion=FALSE) {
 
          $child = $this->get_child($myid);
 
          if(!defined('EFFECTED_INIT')){
 
             $effected = ' id="'.$effected_id.'"';
 
             define('EFFECTED_INIT',1);
 
          } else {
 
             $effected = '';
 
          }
 
  $placeholder = '<ul><li><span class="placeholder"></span></li></ul>';
 
          if(!$recursion) $this->str .='<ul'.$effected.'  class="'.$style.'">';
 
          foreach($child as $id=>$a) {
 
          @extract($a);
 
  if($showlevel > 0 && $showlevel == $currentlevel && $this->get_child($id)) $folder = 'hasChildren'; //如设置显示层级模式@2011.07.01
 
          $floder_status = isset($folder) ? ' class="'.$folder.'"' : '';
 
              $this->str .= $recursion ? '<ul><li'.$floder_status.' id=''.$id.''>' : '<li'.$floder_status.' id=''.$id.''>';
 
              $recursion = FALSE;
 
              if($this->get_child($id)){
 
              eval("$nstr = "$str2";");
 
              $this->str .= $nstr;
 
                  if($showlevel == 0 || ($showlevel > 0 && $showlevel > $currentlevel)) {
 
  $this->get_treeview($id,$effected_id,$showlevel,$style,$currentlevel+1,TRUE);
 
  } elseif($showlevel > 0 && $showlevel == $currentlevel) {
 
  $this->str .= $placeholder;
 
  }
 
              } else {
 
                  eval("$nstr = "$str";");
 
                  $this->str .= $nstr;
 
              }
 
              $this->str .=$recursion ? '</li></ul>': '</li>';
 
          }
 
          if(!$recursion)  $this->str .='</ul>';
 
          return $this->str;
 
      }
 
  /**
 
  * 获取子栏目json
 
  * Enter description here ...
 
  * @param unkNown_type $myid
 
  */
 
  public function creat_sub_json($myid,$str='') {
 
  $sub_cats = $this->get_child($myid);
 
  $n = 0;
 
  if(is_array($sub_cats)) foreach($sub_cats as $c) {

(编辑:十堰站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读