php 系统树形类,以树形方式显示

<?php
/**
*系统树形类,以树形方式显示
*
*
*/
header("Content-type: text/html; charset=utf-8;");
class TreeModel{
    /**
    *树形标识
    */
    public $icon = array(‘│‘,‘├‘,‘└‘);
    public $nbsp = "&nbsp;&nbsp;&nbsp;";
    /**
    *树形的二维数组数据
    */
    public $arr = array();
    public $arrTree = array();
    public $ret;
    
    /**
    *初始化数组,传入的数组必须是
    * array(
    *      1 => array(‘id‘=>‘1‘,‘parentid‘=>0,‘name‘=>‘一级栏目一‘),
    *      2 => array(‘id‘=>‘2‘,‘parentid‘=>0,‘name‘=>‘一级栏目二‘),
    *      3 => array(‘id‘=>‘3‘,‘parentid‘=>1,‘name‘=>‘二级栏目一‘)
    *)这种形式 数组下标与当前数据ID相同
    */
    public function init($arr = array()){
        if(!empty($arr) && is_array($arr)) {
             $this->arr = $arr;
        }
        return $this->arr;
    }
    
    //-------------------------------------------------------------------
    
    /**
    *获得全部的树形数据
    *每个父类的子类在$arr[son]数据中
    *占用空间比较大
    */
    public function GetArrayTreeSpace()
    {
        $tmpArray    = array();  //临时数组
        $tmpSonArray = array();
        $tmp         = array();

$tmpArray = $this->arr;

$key = ‘‘;
        foreach($tmpArray as $key=>$tmp) {
            if($tmp[‘parentid‘]) {//如果存在父级ID
                $tmpArray[$tmp[‘parentid‘]][‘son‘][] = &$tmpArray[$key];
                $tmpSonArray[] = $key;
            }
        }
        foreach($tmpSonArray as $key) {
            unset($tmpArray[$key]);
        }
        unset($tmpSonArray);
        return $this->arrTree = $tmpArray;
    }
    /**
    *获得此类的同级父数组,
    *
    */
    public function GetParent($myid) {
        $tmp = array();
        $parentid = $this->arr[$myid][‘parentid‘];
        $parentid = $this->arr[$parentid][‘parentid‘];
        foreach($this->arr as $v) {
            if($parentid == $v[‘parentid‘]) {
                $tmp[] = $v;
            }
        }
    }
    
    /**
    *获得此类的子类
    *
    */
    public function GetChild($myid) {
        $tmp = array();
        foreach($this->arr as $key=>$v) {
            if($v[‘parentid‘] == $myid){
                $tmp[$key] = $v;
            }
        }
        return $tmp;
    }
    /**
    *输出html格式的树形
    *@param 数据
    *@param 输出的格式
    */
    public function GetViewTreeSpace($arr,$str,$adds=‘‘) {
        $ret = ‘‘;
        $nbsp = $this->nbsp;
        $spacer = $adds ? $this->icon[1].$nbsp.$adds : ‘‘;
        foreach($arr as $tmp) {
            @extract($tmp); //转换数组下标为变量
            eval("\$nstr = \"$str\";");
            $ret .= $nstr;
            if(isset($tmp[‘son‘])) {
                $ret .= $this->GetViewTreeSpace($tmp[‘son‘],$str,$nbsp.$this->icon[2].$adds);
            }
        }
        return $ret;
    }
    /**
    *输出html格式的树形
    *@param 父级ID
    *@param 输出的格式
    */
    public function GetViewTree($myid,$str,$adds=‘‘) {
        $child  = $this->GetChild($myid);
        $nbsp = $this->nbsp;
        $spacer = $adds ? $this->icon[1].$nbsp.$adds : ‘‘;
        foreach($child as $key=>$tmp) {
            @extract($tmp); //转换数组下标为变量
            eval("\$nstr = \"$str\";");
            $this->ret .= $nstr;
            $this->GetViewTree($key,$str,$nbsp.$this->icon[2].$adds);
        }
        return $this->ret;
    }

}

$array =  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‘=>0,‘name‘=>‘一级栏目一‘),
          5 => array(‘id‘=>‘5‘,‘parentid‘=>2,‘name‘=>‘二级栏目二‘),
          6 => array(‘id‘=>‘6‘,‘parentid‘=>5,‘name‘=>‘三级栏目一‘),
          7 => array(‘id‘=>‘7‘,‘parentid‘=>3,‘name‘=>‘三级栏目一‘),
          8 => array(‘id‘=>‘8‘,‘parentid‘=>7,‘name‘=>‘四级栏目二‘),
          9 => array(‘id‘=>‘9‘,‘parentid‘=>1,‘name‘=>‘二级栏目一‘),
          10 => array(‘id‘=>‘10‘,‘parentid‘=>0,‘name‘=>‘一级栏目一‘),
          11 => array(‘id‘=>‘11‘,‘parentid‘=>2,‘name‘=>‘二级栏目二‘)
          );
        $Trees = new TreeModel();
        $Trees->init($array);
        //print_r($array);
        $str = ‘<li>$spacer $name [id] $id</li>‘;
        echo $Trees->GetViewTree(0, $str);
        echo ‘<br/><br/><br/><br/>‘;
        $arr = $Trees->GetArrayTreeSpace();
        
        echo $Trees->GetViewTreeSpace($arr,$str);

两次结果输出如下:

  • 一级栏目一 [id] 1
  • ├      └ 二级栏目一 [id] 3
  • ├      └   └ 三级栏目一 [id] 7
  • ├      └   └   └ 四级栏目二 [id] 8
  • ├      └ 二级栏目一 [id] 9
  • 一级栏目二 [id] 2
  • ├      └ 二级栏目二 [id] 5
  • ├      └   └ 三级栏目一 [id] 6
  • ├      └ 二级栏目二 [id] 11
  • 一级栏目一 [id] 4
  • 一级栏目一 [id] 10
  • 一级栏目一 [id] 1
  • ├      └ 二级栏目一 [id] 3
  • ├      └   └ 三级栏目一 [id] 7
  • ├      └   └   └ 四级栏目二 [id] 8
  • ├      └ 二级栏目一 [id] 9
  • 一级栏目二 [id] 2
  • ├      └ 二级栏目二 [id] 5
  • ├      └   └ 三级栏目一 [id] 6
  • ├      └ 二级栏目二 [id] 11
  • 一级栏目一 [id] 4
  • 一级栏目一 [id] 10

欢迎大家讨论更好的方法

时间: 2024-08-23 21:16:59

php 系统树形类,以树形方式显示的相关文章

JavaScript DOM操作案例点击按钮通过类样式的方式显示跟隐藏div

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <style> div { width: 300px; height: 300px; background-color: pink; } .cls { display: none; } </style> </h

机房收费系统——UML类图

在对一个软件系统进行设计和建模的时候,通常是从构造系统的基本词汇开始,包括构造这些词汇的基本属性和行为.系统分析师如果要对所设计的系统清晰认识,还有考虑这些基本词汇之间的关系.而如果把这些行为可视化为图,就是通常所说的类图. 类图(Class Diagram)是描述类.接口.协作以及它们之间关系的图,用来显示系统中的各个类的静态结构. 类图包括3方面内容: 1.类(Class): 2.接口: 3.关系: 类 类是对一组具有相同属性.操作.关系和语义的对象的描述. 主要包括:类的名称(ClassN

C语言获取系统时间的几种方式

C语言获取系统时间的几种方式 2009-07-22 11:18:50|  分类: 编程学习 |字号 订阅 C语言中如何获取时间?精度如何? 1 使用time_t time( time_t * timer ) 精确到秒2 使用clock_t clock() 得到的是CPU时间 精确到1/CLOCKS_PER_SEC秒3 计算时间差使用double difftime( time_t timer1, time_t timer0 )4 使用DWORD GetTickCount() 精确到毫秒5 如果使用

JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)

第一种:对象冒充 function ClassA(sColor) { this.color = sColor; this.sayColor = function () { alert(this.color); }; } function ClassB(sColor, sName) { this.newMethod = ClassA; this.newMethod(sColor); delete this.newMethod; this.name = sName; this.sayName = f

Scroll View 控件以Thumbnail的方式显示一个文件夹的所有图片,类似图片浏览器

MAC : XCode -> Scroll View 控件以Thumbnail的方式显示一个文件夹的所有图片,类似图片浏览器 STEP1:将两个文件夹拷贝到工程里面ImageBrowserView和Utils,并且在工程里面建立对应组和导入文件 STEP2:将Quartz.framework 和QuartzCore.framework库 导入到工程里面,这两个库是系统库 STEP3:   找到控件Scroll View 控件,上面写着"Scroll View"拖入到工程里面,然后

完整的系统帮助类Utils

//来源:http://www.cnblogs.com/yuangang/p/5477324.html using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; using System.Web; using System.Security.Cryptography; using System.Text.Regul

drf框架 8 系统权限类使用 用户中心信息自查 token刷新机制 认证组件项目使用:多方式登录 权限组件项目使用:vip用户权限 频率组件 异常组件项目使用

系统权限类使用 图书接口:游客只读,用户可增删改查权限使用 from rest_framework.permissions import IsAuthenticatedOrReadOnly class BookViewSet(ModelViewSet): # 游客只读,用户可增删改查 permission_classes = [IsAuthenticatedOrReadOnly] queryset = models.Book.objects.all() serializer_class = se

C++ 类占用空间计算方式

1.一个类占用的空间主要是属性占用空间,而成员函数一般不占用空间,但是虚函数占用空间,需要说明的是,无论多少个虚函数,只要占用4个字节即可,也就是索引指向一个虚拟表的首位置.另外需要说明的是占用空间都考虑了对齐,所以不足4个的按照满4个的算. 2.类的继承,子类占用空间是父类基础上增加本类空间即可.所以说可以认为,子类就是直接拷贝了父类的内容,然后结合自身的内容.而且存储空间也是这个顺序,即先父类分配空间,然后才是子类空间. 3.静态成员变量不占用类空间,应该是确实没有放入这个类的里面,而且没有

第六篇:在SOUI中用九宫格拉伸方式显示一个图片资源

SOUI的初学者刚开始可能难以搞清楚在SOUI中显示一个图片资源的流程,这里做一个简单的示范. 首先我们准备好一张图,以下图为例. 第一步,我们首先把这个图片文件复制到demo的uires目录下,新建一个目录jpg,下面只有这一个文件9.jpg 第二步,我们需要在uires.idx中引入该图片资源 <jpg> <file name="girl" path="jpg\9.jpg"/> </jpg> 我们给这个资源命名为"g