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.'&nbsp;',$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.'&nbsp;');
    $number++;
   }
  }
  return $this->ret;
 }
 
 function have($list,$item){
  return(strpos(',,'.$list.',',','.$item.','));
 }
}

时间: 2024-10-09 11:43:09

php 通用的树型类 可以生成任何树型结构的相关文章

asp.net递归生成XML树的示例

asp.net|xml|生成xml|示例|递归 asp.net递归生成XML树的示例 代码: 以下是引用片段://CDepartmentInfo 类别实体类 //sjid :与大类别关联ID //space:只是一个标记 //strOpinion用来存放类名 string sjid = "0"; string space = "+"; string strOpinion = ""; string paths = @"E:\test&qu

用Java实现可保存状态的数据库生成XML树(2)

xml|生成xml|数据|数据库 4.3.构造生成XML的servlet这一步的主要实现是从数据表中提取符合要求的记录生成嵌套的XML,servlet的源码是XMLServlet.java,选用oracle作数据库服务器.对数据库记录处理的过程基本上类似于XSL模版的处理:先查找layer的值为0的记录,对该记录进行分析,分析是否具有下级节点,这是通过该记录的href是否为空来进行分支处理的,href为空时,通过id的输入参数进行递归查找,请参见XMLServlet.java源码. /*RowS

用Java实现可保存状态的数据库生成XML树(1)-基于weblogic,包括一些基础问题,非常详细的。

web|xml|生成xml|数据|数据库|问题 用Java实现可保存状态的数据库生成XML树目录  0.    关键字词注释    11.    目的    12.    设计思想    13.    实现概要    14.    实现步骤    24.1.XML文档结构定义    24.2.数据表的结构定义    44.3.构造生成XML的servlet    44.4.构造显示树型结构的XSL模版    84.5.构造生成点击树型XMl显示详细节点内容的Servlet    124.6.Se

PHP跳转函数和一个通用的操作提示类的编写

PHP 跳转,即重定向浏览器到指定的 URL,是一个很常见的功能.这种功能也有一些细节性的要求,比如等待多少秒以后跳转,用不用JavaScript实现跳转,等等.下面的跳转方法考虑到很多,并参数化,可以用到具体的项目当中. <?php /** * 重定向浏览器到指定的 URL * * @param string $url 要重定向的 url * @param int $delay 等待多少秒以后跳转 * @param bool $js 指示是否返回用于跳转的 JavaScript 代码 * @p

.NET 2.0 基础类库中的范型——其他范型类

其他范型类.NET 2.0 基础类库对范型的应用当然并不仅限于范型集合和 Functional Programming.下面所列的范型类也都有其明确的设计目的和用途. Array在.NET 2.0中,Array 类扩充了对范型编程的支持.当然,Array类本身并不是范型类(出于兼容的考虑),而是提供了一系列支持范型的方法.除了前面提到的 Functional Programming 的支持外,Array 类还对以前很多基于 object 的方法提供了对应的范型版本,这样对值类型可以提高查找和排序

新近写了个通用的数据库访问类(c#)

访问|数据|数据库 新近写了个通用的数据库访问类(c#);支持oledb\sql\oracle\odbc数据连接,提供sysbase,db2 的接口支持,如果有什么错误.意见.建议.请联系我yu_nan88@126.com http://mail.gongyi.gov.cn/netdisk/download.php?user=zhaobin@gongyi.gov.cn&id=2712a90f0de399014bfbea6e697381a3&filename=L7mk1/cvTXlQRE8u

一个.net下通用的Cookie操作类

笔者曾经参与一个大型多用户商城的开发,系统用户角色很多,有买家,卖家,代理商,系统管理员 ,普通管理员,超级管理员等,这些用户都涉及到登陆系统,然后建立cookies的问题,由于角色的不同 ,这些用户登陆系统后,所建的cookies都相对独立,而且对一个多用户商城来说,cookies区分域很重要 ,不同的域名要建不同的域.因此笔者在开发的过程中,写了很多次的建cookies,取cookies的代码,不 胜其烦! 既然都是建cookies,那么肯定有共同点,我们何不抽象出来,写一个通用的Cooki

php实现通用的信用卡验证类

 这篇文章主要介绍了php实现通用的信用卡验证类,涉及信用卡的规则与php字符串操作的相关技巧,具有一定参考借鉴价值,文中有英文原文注释说明,有助于更直观的了解源码相关信息,需要的朋友可以参考下     本文实例讲述了php实现通用的信用卡验证类.分享给大家供大家参考. 原文说明如下: Credit Card Validation Solution (PHP Edition) Version 3.5 Description Credit Card Validation Solution uses

hibernate-eclipse如何利用数据库反向生成Hibernate多对多、一对多实体类(生成全部为int类型)。

问题描述 eclipse如何利用数据库反向生成Hibernate多对多.一对多实体类(生成全部为int类型). 如题 解决方案 如果你表的关系建好了,,直接通过dataSource就能反向生成了 解决方案二: Myeclipse 连接到你的数据库,在对应的表上右击,点hibernate reserve ,然后一步步操作下去,就会成功 解决方案三: /* SQLyog Ultimate v10.00 Beta1 MySQL - 5.6.26-log : Database - db_template