<?php
/**
*
*
*
* $Id: tree.class.php 3775 2010-07-16 07:46:52Z yexinhao $
*/
class Tree {
var $data = array();
var $child = array(-1 => array());
var $layer = array(-1 => -1);
var $parent = array();
var $countid = 0;
function Tree($value) {}
function setNode($id, $parent, $value) {
$parent = $parent?$parent:0;
$this->data[$id] = $value;
$this->child[$parent][] = $id;
$this->parent[$id] = $parent;
if(!isset($this->layer[$parent])) {
$this->layer[$id] = 0;
} else {
$this->layer[$id] = $this->layer[$parent] + 1;
}
}
function getList(&$tree, $root= 0) {
foreach($this->child[$root] as $key => $id) {
$tree[] = $id;
if(!empty($this->child[$id])) $this->getList($tree, $id);
}
}
function getValue($id) {
return $this->data[$id];
}
function reSetLayer($id) {
if($this->parent[$id]) {
$this->layer[$this->countid] = $this->layer[$this->countid] + 1;
$this->reSetLayer($this->parent[$id]);
}
}
function getLayer($id, $space = false) {
//重新计算级数
$this->layer[$id] = 0;
$this->countid = $id;
$this->reSetLayer($id);
return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];
}
function getParent($id) {
return $this->parent[$id];
}
function getParents($id) {
while($this->parent[$id] != -1) {
$id = $parent[$this->layer[$id]] = $this->parent[$id];
}
ksort($parent); //按照键名排序
reset($parent); //数组指针移回第一个单元
return $parent;
}
function getChild($id) {
if(!empty($this->child[$id])) {
return $this->child[$id];
} else {
return 0;
}
}
function getChilds($id = 0) {
$child = array();
$this->getList($child, $id);
return $child;
}
}
?>
function getmodelcategory($name, $space='|----') {
global $_SGLOBAL;
$listarr = array();
if(in_array($name, array('shop', 'region', 'good', 'album', 'consume', 'notice', 'groupbuy'))) {
include_once(B_ROOT.'./source/class/tree.class.php');
$tree = new Tree($name);
$miniupid = '';
foreach($_SGLOBAL[$name.'cates'] as $catid=>$category) {
if($miniupid === '') $miniupid = $category['upid'];
$tree->setNode($category['catid'], $category['upid'], $category);
}
//根目录
if(count($_SGLOBAL[$name.'cates']) > 0) {
$categoryarr = $tree->getChilds($miniupid);
foreach ($categoryarr as $key => $catid) {
$cat = $tree->getValue($catid);
$cat['pre'] = $tree->getLayer($catid, $space);
$cat['havechild'] = $tree->getChild($catid) ? 1: 0;
$listarr[$cat['catid']] = $cat;
}
}
}
return $listarr;
}