加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2023-02-16 12:44:07 所属栏目: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 = 二级栏目一)
  效果:
 
 
 
  实现代码:
 
  <?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 => array('id' => '4','name' => '二级栏目二'),
 
      5 => array('id' => '5','pid' => 2,'name' => '二级栏目三'),
 
      6 => array('id' => '6','pid' => 3,'name' => '三级栏目一'),
 
      7 => array('id' => '7','name' => '三级栏目二')
 
  );
 
  $tree = new tree($list);
 
  $html = "<select name='cat'>";
 
  $str = "<option value=$id $selected>$spacer$name</option>";
 
  $html .= $tree->get_tree(0,$str,$selected=4);
 
  $html .= "</select>";
 
  echo($html);
 
  ?>
 
  tree.class.PHP:
 
  <?PHP
 
  /**
 
  * 通用的树型类,可以生成任何树型结构
 
  */
 
  class tree {
 
  /**
 
  * 生成树型结构所需要的2维数组
 
  * @var array
 
  */
 
  public $arr = array();
 
  /**
 
  * 生成树型结构所需修饰符号,可以换成图片
 
  * @var array
 
  */
 
  public $icon = array('│','├','└');
 
  public $nbsp = " ";
 
  /**
 
  * @access private
 
  */
 
  public $ret = '';
 
  /**
 
  * 构造函数,初始化类
 
  * @param array 2维数组,例如:
 
  * array(
 
  *      1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
 
  *      2 => array('id'=>'2','name'=>'一级栏目二'),
 
  *      3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
 
  *      4 => array('id'=>'4','name'=>'二级栏目二'),
 
  *      5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
 
  *      6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
 
  *      7 => array('id'=>'7','name'=>'三级栏目二')
 
  *      )
 
  */
 
  public function __construct($arr=array()){
 
         $this->arr = $arr;
 
    $this->ret = '';
 
    return is_array($arr);
 
  }
 
      /**
 
  * 得到父级数组
 
  * @param int
 
  * @return array
 
  */
 
  public 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
 
  */
 
  public 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
 
  */
 
  public 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
 
  */
 
  public function get_tree($myid,$sid = 0,$adds = '',$str_group = ''){
 
  $number=1;
 
  $child = $this->get_child($myid);
 
  if(is_array($child)){
 
     $total = count($child);
 
  foreach($child as $id=>$value){
 
  $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($value);
 
  $parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";");

(编辑:甘南站长网)

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

推荐文章
    热点阅读