最模板 - 外贸网站建设,外贸网站模板

最模板

当前位置: 首页 > 建站教程 > php教程 >

php无限分类可支持输出树状图实现代码

时间:2014-06-09 16:39来源: 作者: 点击: 次
这是一段可支持输出树状图的php无限分类实现代码,转自其它网站有需要了解的朋友可参考一下哦,数据库结构我们只要id,parentid,name这三个字段就可以了,大家可自行创建。 数据库结构我们只

这是一段可支持输出树状图的php无限分类实现代码,转自其它网站有需要了解的朋友可参考一下哦,数据库结构我们只要id,parentid,name这三个字段就可以了,大家可自行创建。

数据库结构我们只要,无平台限制,只需要告知id,parentid,name 即可,下面是php代码,需要php环境支持,代码如下:

  1. <?php 
  2. /** 
  3. * 通用的树型类,可以生成任何树型结构 
  4. */ 
  5. class tree 
  6. { 
  7.  /** 
  8.  * 生成树型结构所需要的2维数组 
  9.  * @var array 
  10.  */ 
  11.  var $arr = array(); 
  12.  /** 
  13.  * 生成树型结构所需修饰符号,可以换成图片 
  14.  * @var array 
  15.  */ 
  16.  var $icon = array('│','├','└'); 
  17.  /** 
  18.  * @access private 
  19.  */ 
  20.  var $ret = ''; 
  21.  /** 
  22.  * 构造函数,初始化类 
  23.  * @param array 2维数组,例如: 
  24.  * array( 
  25.  *      1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'), 
  26.  *      2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'), 
  27.  *      3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'), 
  28.  *      4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'), 
  29.  *      5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'), 
  30.  *      6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'), 
  31.  *      7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二') 
  32.  *      ) 
  33.  */ 
  34.  function tree($arr=array()) 
  35.  { 
  36.        $this->arr = $arr; 
  37.     $this->ret = ''; 
  38.     return is_array($arr); 
  39.  } 
  40.     /** 
  41.  * 得到父级数组 
  42.  * @param int 
  43.  * @return array 
  44.  */ 
  45.  function get_parent($myid) 
  46.  { 
  47.   $newarr = array(); 
  48.   if(!isset($this->arr[$myid])) return false; 
  49.   $pid = $this->arr[$myid]['parentid']; 
  50.   $pid = $this->arr[$pid]['parentid']; 
  51.   if(is_array($this->arr)) 
  52.   { 
  53.    foreach($this->arr as $id => $a) 
  54.    { 
  55.     if($a['parentid'] == $pid) $newarr[$id] = $a; 
  56.    } 
  57.   } 
  58.   return $newarr; 
  59.  } 
  60.     /** 
  61.  * 得到子级数组 
  62.  * @param int 
  63.  * @return array 
  64.  */ 
  65.  function get_child($myid) 
  66.  { 
  67.   $a = $newarr = array(); 
  68.   if(is_array($this->arr)) 
  69.   { 
  70.    foreach($this->arr as $id => $a) 
  71.    { 
  72.     if($a['parentid'] == $myid) $newarr[$id] = $a; 
  73.    } 
  74.   } 
  75.   return $newarr ? $newarr : false; 
  76.  } 
  77.     /** 
  78.  * 得到当前位置数组 
  79.  * @param int 
  80.  * @return array 
  81.  */ 
  82.  function get_pos($myid,&$newarr) 
  83.  { 
  84.   $a = array(); 
  85.   if(!isset($this->arr[$myid])) return false; 
  86.         $newarr[] = $this->arr[$myid]; 
  87.   $pid = $this->arr[$myid]['parentid']; 
  88.   if(isset($this->arr[$pid])) 
  89.   { 
  90.       $this->get_pos($pid,$newarr); 
  91.   } 
  92.   if(is_array($newarr)) 
  93.   { 
  94.    krsort($newarr); 
  95.    foreach($newarr as $v) 
  96.    { 
  97.     $a[$v['id']] = $v; 
  98.    } 
  99.   } 
  100.   return $a; 
  101.  } 
  102.  
  103.  /** 
  104.   * ------------------------------------- 
  105.   *  得到树型结构 
  106.   * ------------------------------------- 
  107.   * @author  Midnight(杨云洲),  yangyunzhou@foxmail.com 
  108.   * @param $myid 表示获得这个ID下的所有子级 
  109.   * @param $str 生成树形结构基本代码, 例如: "<option value=$id $select>$spacer$name</option>" 
  110.   * @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到 
  111.   * @param $adds 
  112.   * @param $str_group 
  113.   * @return unknown_type 
  114.   */ 
  115.  function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '') 
  116.  { 
  117.   $number=1; 
  118.   $child = $this->get_child($myid); 
  119.   if(is_array($child)) 
  120.   { 
  121.       $total = sqlserver/42852.htm target=_blank >count($child); 
  122.    foreach($child as $id=>$a) 
  123.    { 
  124.     $j=$k=''; 
  125.     if($number==$total) 
  126.     { 
  127.      $j .= $this->icon[2]; 
  128.     } 
  129.     else 
  130.     { 
  131.      $j .= $this->icon[1]; 
  132.      $k = $adds ? $this->icon[0] : ''; 
  133.     } 
  134.     $spacer = $adds ? $adds.$j : ''; 
  135.     $selected = $id==$sid ? 'selected' : ''; 
  136.     @extract($a); 
  137.     $parentid == 0 && $str_group ? eval("$nstr = "$str_group";") : eval("$nstr = "$str";"); 
  138.     $this->ret .= $nstr; 
  139.     $this->get_tree($id, $str, $sid, $adds.$k.'&nbsp;',$str_group); 
  140.     $number++; 
  141.    } 
  142.   } 
  143.   return $this->ret; 
  144.  } 
  145.     /** 
  146.  * 同上一方法类似,但允许多选 
  147.  */ 
  148.  function get_tree_multi($myid, $str, $sid = 0, $adds = '') 
  149.  { 
  150.   $number=1; 
  151.   $child = $this->get_child($myid); 
  152.   if(is_array($child)) 
  153.   { 
  154.       $total = count($child); 
  155.    foreach($child as $id=>$a) 
  156.    { 
  157.     $j=$k=''; 
  158.     if($number==$total) 
  159.     { 
  160.      $j .= $this->icon[2]; 
  161.     } 
  162.     else 
  163.     { 
  164.      $j .= $this->icon[1]; 
  165.      $k = $adds ? $this->icon[0] : ''; 
  166.     } 
  167.     $spacer = $adds ? $adds.$j : ''; 
  168.     $selected = $this->have($sid,$id) ? 'selected' : ''; 
  169.     //echo $sid.'=>'.$id.' : '.$selected.' . <br/>'; 
  170.     @extract($a); 
  171.     eval("$nstr = "$str";"); 
  172.     $this->ret .= $nstr; 
  173.     $this->get_tree_multi($id, $str, $sid, $adds.$k.'&nbsp;'); 
  174.     $number++; 
  175.    } 
  176.   } 
  177.   return $this->ret; 
  178.  } 
  179.  function have($list,$item){ 
  180.   return(strpos(',,'.$list.',',','.$item.',')); 
  181.  } 
  182. } 
  183. ?> 

效果就是

aa   bbb   ccc 这样哦,可实现无限级分类. (责任编辑:admin)
------分隔线----------------------------
栏目列表
推荐内容