php实现无限级分类

  • <?php   
  • /**   
  • * author: askie   
  • * blog: http://www.pkphp.com   
  • * 版权: 随便用   
  • * 无限分类   
  • */   
  • class Tree   
  • {   
  • public $data=array();   
  • public $cateArray=array();   
  •  
  • function Tree()   
  • {   
  •  
  • }   
  • function setNode ($id, $parent, $value)   
  • {   
  • $parent = $parent?$parent:0;   
  • $this->data[$id] = $value;   
  • $this->cateArray[$id] = $parent;   
  • }   
  • function getChildsTree($id=0)   
  • {   
  • $childs=array();   
  • foreach ($this->cateArray as $child=>$parent)   
  • {   
  • if ($parent==$id)   
  • {   
  • $childs[$child]=$this->getChildsTree($child);   
  • }   
  •  
  • }   
  • return $childs;   
  • }   
  • function getChilds($id=0)   
  • {   
  • $childArray=array();   
  • $childs=$this->getChild($id);   
  • foreach ($childs as $child)   
  • {   
  • $childArray[]=$child;   
  • $childArray=array_merge($childArray,$this->getChilds($child));   
  • }   
  • return $childArray;   
  • }   
  • function getChild($id)   
  • {   
  • $childs=array();   
  • foreach ($this->cateArray as $child=>$parent)   
  • {   
  • if ($parent==$id)   
  • {   
  • $childs[$child]=$child;   
  • }   
  • }   
  • return $childs;   
  • }   
  • //单线获取父节点   
  • function getNodeLever($id)   
  • {   
  • $parents=array();   
  • if (key_exists($this->cateArray[$id],$this->cateArray))   
  • {   
  • $parents[]=$this->cateArray[$id];   
  • $parents=array_merge($parents,$this->getNodeLever($this->cateArray[$id]));   
  • }   
  • return $parents;   
  • }   
  • function getLayer($id,$preStr=’|-’)   
  • {   
  • return str_repeat($preStr,count($this->getNodeLever($id)));   
  • }   
  • function getValue ($id)   
  • {   
  • return $this->data[$id];   
  • } // end func   
  • }   
  •  
  • $Tree = new Tree(”请选择分类”);   
  • //setNode(目录ID,上级ID,目录名字);   
  • $Tree->setNode(1, 0, ‘目录1′);   
  • $Tree->setNode(2, 1, ‘目录2′);   
  • $Tree->setNode(5, 3, ‘目录5′);   
  • $Tree->setNode(3, 0, ‘目录3′);   
  • $Tree->setNode(4, 2, ‘目录4′);   
  • $Tree->setNode(9, 4, ‘目录9′);   
  • $Tree->setNode(6, 2, ‘目录6′);   
  • $Tree->setNode(7, 2, ‘目录7′);   
  • $Tree->setNode(8, 3, ‘目录8′);   
  •  
  • //print_r($Tree->getChildsTree(0));   
  • //print_r($Tree->getChild(0));   
  • //print_r($Tree->getLayer(2));   
  •  
  • $category = $Tree->getChilds();   
  •  
  • //遍历输出   
  • foreach ($category as $key=>$id)   
  • {   
  • echo $id.$Tree->getLayer($id, ‘|-’).$Tree->getValue($id).”n”;   
  • }   
  •  
  • ?>  
  • 赞(0)
    版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
    文章名称:《php实现无限级分类》
    文章链接:https://www.skykkk.com/archives1128.html
    本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

    相关推荐

    • 暂无文章