博客
关于我
ThinkPHP之下拉树
阅读量:709 次
发布时间:2019-03-21

本文共 2462 字,大约阅读时间需要 8 分钟。

物资种类表呈现树状结构是常见的数据展示方式,其核心在于通过数据库查询获取数据后,将其转换为层级化的树结构,便于后续的功能开发。在实际项目中,以下代码逻辑可以帮助实现这一目标。

数据获取与树结构转换

代码首先通过D('MaterialCategory')获取物资种类数据,并使用select()方法获取id、pid、name字段。随后调用toFormatTree方法,将这些数据转换为树状结构。以下是实现细节:

$mlist = D('MaterialCategory') -> field('id,pid,name') -> select();$tree = D('Common/Tree') -> toFormatTree($mlist, 'name');$treeoptions = array_column($tree, 'title_show', 'id');$this->assign('treeoptions', option_selected($treeoptions, $categoryid));

树结构转换的核心逻辑

toFormatTree方法的实现逻辑主要包含两个部分:第一部分通过list_to_tree函数将原始数据转换为树结构;第二部分通过递归的 _toFormatTree 方法对树结构进行层级格式化。

表单数据转树结构

list_to_tree函数的主要职责是将一维数组转换为树结构。以下是实现逻辑:

function list_to_tree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) {    $tree = array();    if (is_array($list)) {        $refer = array();        foreach ($list as $key => $data) {            $refer[$data[$pk]] = $list[$key];        }        foreach ($list as $key => $data) {            $parentId = $data[$pid];            if ($root == $parentId) {                $tree[] = $list[$key];            } else {                if (isset($refer[$parentId])) {                    $parent = $refer[$parentId];                    $parent[$child][] = $list[$key];                }            }        }    }    return $tree;}

树结构层级化格式化

toFormatTree方法通过递归的形式将树结构进一步格式化,添加层级信息和显示标题。以下是实现逻辑:

private $formatTree;private function _toFormatTree($list, $level = 0, $title = 'title') {    $tmp_str = str_repeat(' ', $level * 2);    foreach ($list as $key => $val) {        if (!isset($val['_child'])) {            $val['level'] = $level;            $val['title_show'] = $level === 0 ? $val[$title] : $tmp_str . ">{$val[$title]}";            array_push($this->formatTree, $val);        } else {            $tmp_ary = $val['_child'];            unset($val['_child']);            $val['level'] = $level;            $val['title_show'] = $tmp_str . ">{$val[$title]}";            array_push($this->formatTree, $val);            $this->_toFormatTree($tmp_ary, $level + 1, $title);        }    }}

代码解读与优化

以上代码主要包含三个部分:数据获取与转换、树结构生成以及层级化格式化。具体实现逻辑如下:

  • 数据获取与树结构生成:首先从数据库获取物资种类数据,然后调用toFormatTree方法将其转换为树结构数组,最后为视图变量赋值。
  • 树结构生成list_to_tree函数通过构建索引引用将一维数组转换为树结构,根节点的Pid设为0。
  • 层级化格式化toFormatTree方法将树结构进一步格式化,为每个节点添加leveltitle_show字段,生成层级化格式的标签。
  • 递归树结构的深度优化

    在实现上,函数主要通过递归的方式处理树结构,减少了层级化处理的复杂度。整个过程分为两部分:首先是数据转换,确保每个节点都能正确关联其子节点;其次是树结构的格式化,生成人们易于理解的树形展示方式。

    通过以上逻辑,可以实现从数据库获取的物资种类数据以树形结构展示,为后续的物资管理提供了良好的数据交互基础。

    以上内容理解了物资种类树状结构的实现逻辑,结合数据库查询与层级化示例展示,提供了清晰的代码解读。

    转载地址:http://uikrz.baihongyu.com/

    你可能感兴趣的文章
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner使用教程:右侧工具栏显示/隐藏
    查看>>
    PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
    查看>>
    PowerDesigner使用教程:时间字段设置
    查看>>
    PowerDesigner使用教程:给字段添加唯一约束
    查看>>
    QGIS中怎样设置图层样式并导出地图样式
    查看>>
    PowerDesigner使用笔记
    查看>>
    QGIS中怎样实现数据坐标系转换
    查看>>
    PowerDesigner学习--基本步骤
    查看>>
    PowerDesigner导出Report通用报表
    查看>>
    PowerDesigner教程系列(二)概念数据模型
    查看>>
    Powerdesigner显示表的comment和列的comment的方法
    查看>>
    PowerDesigner最基础的使用方法入门学习
    查看>>
    PowerDesigner版本控制器设置权限
    查看>>
    PowerDesigner生成数据模型并导出报告
    查看>>
    QGIS中导入dwg文件并使用GetWKT插件获取绘制元素WKT字符串以及QuickWKT插件实现WKT显示在图层
    查看>>
    PowerDesigner逆向工程从SqlServer数据库生成PDM(图文教程)
    查看>>
    PowerEdge T630服务器安装机器学习环境(Ubuntu18.04、Nvidia 1080Ti驱动、CUDA及CUDNN安装)
    查看>>
    PowerPC-object与elf中的符号引用
    查看>>