zoukankan      html  css  js  c++  java
  • PHP 使用编码树,生成easyui中的tree样式

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

    nodecode 节点编码

    parentnodecode 父节点编码

    nodename  节点名称

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

    nodecode 节点编码

    nodename 节点名称

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

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

     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     }
  • 相关阅读:
    docker学习之network:初识网络配置
    原来:HTTP可以复用TCP连接
    git tag的用法及意义
    Android,社招,面淘宝,指南【内部人员为你保驾护航】
    别了,拼多多!再也不想砍一刀了,哔哩哔哩 (゜-゜)つロ 干杯~
    【Android面试宝典】2021年,腾讯等大厂Android高级开发面试完全攻略!
    腾讯40岁老兵现身说法:35岁职业生涯分水岭,架构or管理,到底怎么选?
    【整理合集】Flutter 常用第三方库、插件、学习资料等
    [PAT]1011 World Cup Betting (20 分)Java
    [PAT] 1010 Radix (25 分)Java
  • 原文地址:https://www.cnblogs.com/fly_binbin/p/4359883.html
Copyright © 2011-2022 走看看