<?php
/**
+------------------------------------------------
* 通用的树型类
+------------------------------------------------
* @author
yangyunzhou@foxmail.com
+------------------------------------------------
* @date 2010年11月23日10:09:31
+------------------------------------------------
*/
class Tree
{
/**
+------------------------------------------------
* 生成树型结构所须要的2维数组
+------------------------------------------------
* @author
yangyunzhou@foxmail.com
+------------------------------------------------
* @var Array
*/
var $arr = array();
/**
+------------------------------------------------
* 生成树型结构所需修饰符号,能够换成图片
+------------------------------------------------
* @author
yangyunzhou@foxmail.com
+------------------------------------------------
* @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())
{
arr;
$this->ret = '';
return is_array($arr);
}
/**
* 获得父级数组
* @param int
* @return array
*/
function get_parent(newarr = array();
if(!isset(myid])) return false;
this->arr[pid = pid]['parentid'];
if(is_array($this->arr))
{
foreach(id => $a)
{
if(pid) id] = $a;
}
}
return $newarr;
}
/**
* 获得子级数组
* @param int
* @return array
*/
function get_child(a = this->arr))
{
foreach(id => $a)
{
if(myid) id] = $a;
}
}
return newarr : false;
}
/**
* 获得当前位置数组
* @param int
* @return array
*/
function get_pos(newarr)
{
this->arr[$myid])) return false;
this->arr[pid = myid]['parentid'];
if(isset(pid]))
{
pid,$newarr);
}
if(is_array($newarr))
{
krsort(newarr as $v)
{
v['id']] = $v;
}
}
return $a;
}
/**
* -------------------------------------
* 获得树型结构
* -------------------------------------
* @author
yangyunzhou@foxmail.com
* @param $myid 表示得到这个ID下的全部子级
* @param $str 生成树形结构基本代码, 例如: "<option value=\select>\name</option>"
* @param $sid 被选中的ID, 好比在作树形下拉框的时候须要用到
* @param str_group
* @return unknown_type
*/
function get_tree(str, adds = '', number=1;
this->get_child(child)) {
child);
foreach(id=>a);
k='';
if(total) {
this->icon[2];
} else {
this->icon[1];
adds ? $this->icon[0] : '';
}
adds ? j : '';
id==$sid ? 'selected' : '';
@extract(parentid == 0 && nstr = \"nstr = \"this->ret .= this->get_tree(str, adds.str_group);
$number++;
}
}
return $this->ret;
}
/**
+------------------------------------------------
* 格式化数组
+------------------------------------------------
* @author
yangyunzhou@foxmail.com
+------------------------------------------------
*/
function getArray(sid=0, number=1;
this->get_child(child)) {
child);
foreach(id=>j=number==j .= $this->icon[2];
} else {
this->icon[1];
adds ? $this->icon[0] : '';
}
adds ? j : '';
@extract(a['name'] = a['name'];
a['id']] = fd = k.' ';
id, fd);
$number++;
}
}
return $this->ret;
}
/**
* 同上一方法相似,但容许多选
*/
function get_tree_multi(str, adds = '')
{
child = myid);
if(is_array($child))
{
child);
foreach(id=>$a)
{
k='';
if(total)
{
this->icon[2];
}
else
{
this->icon[1];
adds ? $this->icon[0] : '';
}
adds ? j : '';
this->have(id) ? 'selected' : '';
//echo id.' : '.$selected.' . <br/>';
@extract(nstr = \"this->ret .= this->get_tree_multi(str, adds.number++;
}
}
return $this->ret;
}
function have(item){ return(strpos(',,'.item.',')); } } ?>