<?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.',')); } } ?>