PHP 使用编码树,生成easyui中的tree样式

 生成树的时候,数据库中通常设计的都为无级数,即为:父子节点的树,例如:基本的数据表设计为:node

nodecode 节点编码数据库

parentnodecode 父节点编码json

nodename  节点名称ui

 

这样的形式,在生成树的时候,根据子找父,再找爷爷的关系,一直找到最顶级,来肯定一个从属关系,若是由父级找子级再找孙子级,那么,就能够有无限个孩子级,因此这种状况,适合不限分类的一种写法,可是这种写法带来的结果就是,效率比较低,处理的时间长,因此在开发过程当中,就出现了一种编码树的形式:基本的数据表设计为:this

nodecode 节点编码编码

nodename 节点名称spa

这种编码树,子节点,带着父节点的信息,好比说节点编码为:001 名称为:1级 节点编码为:001001 名称为:1_1级,今后能够看出,我只要看到001001就能知道他的父级是谁,也能知道他的子集是谁,在数据库中只要使用 likt '001001%',便可获得,以nodecoder的长度为varchar(30)为例,则最多产生10个子集,即001001001001001001001001001001这样的关系,若是以3位长度为一个节点的长度,则可产生999个同级分类,若是以4个节点长度,则可产生9999个节点,因此随着每一个节点的长度的增加,能够容纳更多的节点和子集,此适合不是无限级分类的使用。设计

 

使用无级树,在网上有许多生成easyui中tree使用Json的方法,下面这样方法是根据编码生生成json的方式,仅为简单的一个实现:code

 1     public function getTree($root,$text="typename",$value="typecode", $fileLength = 3) {
 2         $childNode = array(); 3 foreach ($root as $key=>$node) { 4 unset($childNode); 5 foreach ($root as $k => $v) { 6 if ($this->startWith($v["typecode"], $node["typecode"]) && $v["typecode"] != $node["typecode"]) { 7 $childNode[] = $v; 8  } 9  } 10 $treeNode = array(); 11 if (strlen($node["typecode"]) == $fileLength) { 12 $treeNode['children'] = $this->getTree($childNode,$text,$value, $fileLength + 3); 13 $treeNode["id"] = $node[$value]; 14 $treeNode["text"] = $node[$text]; 15 $treeNode["value"] = $node[$value]; 16 $treeNode["checked"] = "false"; 17 // $node["attributes"] = $node; 18 $treeNode["state"] = "open"; 19 $tree[] = $treeNode; 20  } 21  } 22 return $tree; 23  } 24 private function startWith($str, $needle) { 25 return strpos($str, $needle) === 0; 26 }
相关文章
相关标签/搜索