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     }
  • 相关阅读:
    1312. Minimum Insertion Steps to Make a String Palindrome
    【堆】23. Merge k Sorted Lists
    LeetCode 406 根据身高重建队列
    LeetCode 922 按奇偶排序数组II
    LeetCode 31 下一个排列
    LeetCode 941 有效的山脉数组
    LeetCode 面试题4 二维数组中的查找
    LeetCode 463 岛屿的周长
    LeetCode 129 求根到叶子节点数字之和
    LeetCode 1207 独一无二的出现次数
  • 原文地址:https://www.cnblogs.com/fly_binbin/p/4359883.html
Copyright © 2011-2022 走看看