PHP 实现简单的树形列表 之二
admin
2023-06-17 17:22:12
0次

2017.5.22 北京 大雨

来到公司之后, 准备把代码移植到公司的小项目里,移植的过程中发现了一处设计有问题的地方,调整一下。

第一处错误是:构建叶子节点的时候,只保存了节点的名称,没有存ID, 如果页面跟后台交互的时候,当存在节点名称一样的情况,服务器就不能判断出用户正在再操作那个节点。


更改了一下数据结构的定义:
用数组来存放一个节点, 如果这个节点是末端节点,则该数组,只有一个字符串元素,

如果一个节点为叶子节点,则该节点将会有两个字符串元素,第一元素存节点名称,第二个元素存节点ID。
如果这个节点存在子节点,则在当前数组中,增加一个数组,所有的子节点的元素存放在这个数组中。

从数据库中取数据的代码调整如下:

function build_book_tree($data, $parentid){
    $nodeName = '';
    $child = [];
    foreach($data as $key => $val){
        //如果当前遍历的项跟查询的id相同,则获取节点的名称
        if ($val[0] == $parentid){
            $nodeName = $val[1];
        }
        //如果当前节点的父节点跟查询的节点相同,则通过递归,获取他的子节点,并将结果,赋给当前节点节点数组中
        if ($val[2] == $parentid){
            array_push($child, build_book_tree($data, $val[0]));
        }
    }
    //不存放空节点
    if (count($child) > 0)
        return array($nodeName, $child);
    else 
        //return $nodeName;
        return [$nodeName, $parentid];
}

生成HTML list的代码调整如下

function build_html_list($data)
{
    //输出标准父子节点
    if (is_array($data) and count($data) == 2){
        if (is_string($data[0]) and is_array($data[1])){
            // 输出节点名
            echo "
  • ".$data[0];             // 输出子节点             if (is_array($data[1])){                 echo "
      ";                 foreach ($data[1] as $item){                     if (is_string($item)){                         echo "
    • ".$item."
    • ";                     }                      else{                         build_html_list($item);                         }                 }                 echo "
    ";             }             echo "
  • ";            }         // 输出叶子节点 2017.5.22 add by sunhu         else if (is_string($data[0]) and is_int($data[1])){             echo sprintf('%s', $data[1], $data[0]);         }                              }  }

    这样,如果用户单击一个 li 元素的时候,就可以从 li元素的 cid 属性中,查找到 节点 id 了

    相关内容

    热门资讯

    空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
    空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
    格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
    空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
    格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
    品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
    空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
    空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
    中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
    中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...