<?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; }