一个很好的无限级分类类

    技术2022-05-20  35

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


    最新回复(0)