o2geao 发表于 2017-3-20 13:59:35

php class tree

<?php         
      class Tree{         
                var $data = array();
               
                var $child = array(-1=>array());
               
                var $layer = array(-1=>-1);
               
                var $parent = array();
               
                function Tree ($value){
                        $this->setNode(0, -1, $value);
                }

                function setNode ($id, $parent, $value){
                        $parent = $parent?$parent:0;
                        $this->data[$id] = $value;
                        $this->child[$id] = array();
                        $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 ($this->child[$id]) $this->getList($tree, $id);
                        }
                }

                function getValue ($id){
                        return $this->data[$id];
                }

                function getLayer ($id, $space = false){
                        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){
                        return $this->child[$id];
                }

                function getChilds ($id = 0){
                        $child = array($id);
                        $this->getList($child, $id);
                        return $child;
                }
      } // end class
?>
<?php
/*--------------------------------------------------------------------------------
使用方法
PHP代码:--------------------------------------------------------------------------------
*/
      //new Tree(根目录的名字);
      //根目录的ID自动分配为0
      $Tree = new Tree('根目录');
      //setNode(目录ID,上级ID,目录名字);
      $Tree->setNode(1, 0, '目录1');
      $Tree->setNode(2, 0, '目录2');
      $Tree->setNode(3, 0, '目录3');
      $Tree->setNode(4, 3, '目录3.1');
      $Tree->setNode(5, 3, '目录3.2');
      $Tree->setNode(6, 3, '目录3.3');
      $Tree->setNode(7, 2, '目录2.1');
      $Tree->setNode(8, 2, '目录2.2');
      $Tree->setNode(9, 2, '目录2.3');
      $Tree->setNode(10, 6, '目录3.3.1');
      $Tree->setNode(11, 6, '目录3.3.2');
      $Tree->setNode(12, 6, '目录3.3.3');
      //getChilds(指定目录ID);
      //取得指定目录下级目录.如果没有指定目录就由根目录开始
      $category = $Tree->getChilds(3);
      //遍历输出
      foreach ($category as $key=>$id)
      {
      echo $Tree->getLayer($id, '|-').$Tree->getValue($id)."<br>\n";
      }
?>
页: [1]
查看完整版本: php class tree