<?php
namespace tools;
class Tree
{
public $text, $html;
public $arr = array();
public $icon = array('│', '├', '└');
public $nbsp = " ";
public $ret = '';
public function init($arr = array())
{
$this->arr = $arr;
$this->ret = '';
return is_array($arr);
}
/**
* 得到树型结构
* @param int $myid ,表示获得这个ID下的所有子级
* @param string $str 生成树型结构的基本代码,例如:"<option value=\$id \$selected>\$spacer\$name</option>"
* @param int $sid 被选中的ID,比如在做树型下拉框的时候需要用到
* @param string $adds
* @param string $str_group
* @return string
*/
public function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
{
$parent_id = '';
$nstr = '';
$number = 0;
$child = $this->get_child($myid);
if (is_array($child)) {
$total = count($child);
foreach ($child as $id => $value) {
$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($value);
$parent_id == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");
$this->ret .= $nstr;
$nbsp = $this->nbsp;
$this->get_tree($id, $str, $sid, $adds . $k . $nbsp, $str_group);
$number++;
}
}
return $this->ret;
}
public function get_authTree($myid, $current_id, $parent_ids)
{
$nstr = '';
$child = $this->get_child($myid);
if (is_array($child)) {
$menu = current($child);
$text = isset($this->text[$menu['level']]) ? $this->text[$menu['level']] : end($this->text);
foreach ($child as $k => $v) {
@extract($v);
if ($this->get_child($k)) {
if (array_search($k, $parent_ids, true) !== false) {
eval("\$nstr = \"$text[1]\";");
$this->html .= $nstr;
} else {
eval("\$nstr = \"$text[0]\";");
$this->html .= $nstr;
}
self::get_authTree($k, $current_id, $parent_ids);
eval("\$nstr = \"$text[2]\";");
$this->html .= $nstr;
} else {
if ($k == $current_id) {
$a = $this->text['current'];
eval("\$nstr = \"$a\";");
$this->html .= $nstr;
} else {
$a = $this->text['other'];
eval("\$nstr = \"$a\";");
$this->html .= $nstr;
}
}
}
}
return $this->html;
}
public function get_child($myid)
{
$a = $newarr = array();
if (is_array($this->arr)) {
foreach ($this->arr as $id => $a) {
if ($a['parent_id'] == $myid)
$newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}
public function get_level($id, $array = array(), $i = 0)
{
if ($array[$id]['parent_id'] == 0 || empty($array[$array[$id]['parent_id']]) || $array[$id]['parent_id'] == $id) {
return $i;
} else {
$i++;
return self::get_level($array[$id]['parent_id'], $array, $i);
}
}
public function get_authTree_access($myid)
{
$id = '';
$nstr = '';
$child = $this->get_child($myid);
if (is_array($child)) {
$level = current($child);
$text = isset($this->text[$level['level']]) ? $this->text[$level['level']] : end($this->text);
foreach ($child as $k => $v) {
@extract($v);
if ($this->get_child($k)) {
eval("\$nstr = \"$text[0]\";");
$this->html .= $nstr;
self::get_authTree_access($k);
eval("\$nstr = \"$text[1]\";");
$this->html .= $nstr;
} else {
$a = $this->text['other'];
eval("\$nstr = \"$a\";");
$this->html .= $nstr;
}
}
}
return $this->html;
}
}