• 技术文章 >后端开发 >php教程

    php从数据库查询结果生成树形列表的方法,查询结果树形_PHP教程

    2016-07-13 09:56:53原创397

    php从数据库查询结果生成树形列表的方法,查询结果树形


    本文实例讲述了php从数据库查询结果生成树形列表的方法。分享给大家供大家参考。具体分析如下:

    本代码可以从数据库读取数据生成一个类似于windows的资源管理器的树形列表

    <?php
    /* Here are the database definitions (for Solid) that i use in this code.
     * It should not be hard to adapt it to another database.
     */
    /*
    CREATE TABLE dirent_types (
     id INTEGER NOT NULL,
     icon VARCHAR(50),
     name VARCHAR(50),
     PRIMARY KEY(id)
    );
    INSERT INTO dirent_types VALUES(1, 'folderclosed', 'Directory');
    INSERT INTO dirent_types VALUES(2, 'document', 'File');
    CREATE TABLE directory (
     id INTEGER NOT NULL,
     parent INTEGER REFERENCES directory(id),
     name VARCHAR(200),
     icon VARCHAR(50),
     type INTEGER REFERENCES dirent_types(id),
     url VARCHAR(200),
     PRIMARY KEY(id)
    );
    DROP INDEX directory_idx;
    CREATE UNIQUE INDEX directory_idx ON directory(parent, name);
    CREATE SEQUENCE dirent_id;
    "CREATE PROCEDURE insert_dir_entry
     (name VARCHAR, parent INTEGER, type INTEGER)
     RETURNS(id INTEGER)
    BEGIN
     EXEC SQL WHENEVER SQLERROR ABORT;
     EXEC SEQUENCE dirent_id.NEXT INTO id;
     EXEC SQL PREPARE c_insert
     INSERT INTO directory
     (id, parent, type, name)
     VALUES(?, ?, ?, ?);
     EXEC SQL EXECUTE c_insert USING (id, parent, type, name);
     EXEC SQL DROP c_insert;
    END";
    CALL insert_dir_entry('My Computer', NULL, 1);
    CALL insert_dir_entry('Network Neighbourhood', NULL, 1);
    CALL insert_dir_entry('lucifer.guardian.no', 2, 1);
    CALL insert_dir_entry('rafael.guardian.no', 2, 1);
    CALL insert_dir_entry('uriel.guardian.no', 2, 1);
    CALL insert_dir_entry('Control Panel', NULL, 1);
    CALL insert_dir_entry('Services', 6, 1);
    CALL insert_dir_entry('Apache', 7, 2);
    CALL insert_dir_entry('Solid Server 2.2', 7, 2);
    */
    function icon($icon, $name = '', $width = 0, $height = 0) {
     global $DOCUMENT_ROOT;
     $icon_loc = '/pics/menu';
     $file = "$DOCUMENT_ROOT$icon_loc/$icon.gif";
     if (!$width || !$height) {
     $iconinfo = getimagesize($file);
     if (!$width) {
     $width = $iconinfo[0];
     }
     if (!$height) {
     $height = $iconinfo[1];
     }
     }
     printf( '', $name ? " name=\"$name\"" : '',
     $icon, $width, $height);
    }
    function display_directory($parent,$showdepth=0,$ancestors=false){
     global $child_nodes, $node_data, $last_child;
     reset($child_nodes[$parent]);
     $size = sizeof($child_nodes[$parent]);
     $lastindex = $size - 1;
     if (!$ancestors) {
     $ancestors = array();
     }
     $depth = sizeof($ancestors);
     printf( '
    ', $parent, $showdepth > 0 ? 'show' : 'hide'); while (list($index, $node) = each($child_nodes[$parent])) { for ($i = 0; $i < $depth; $i++) { $up_parent = (int)$node_data[$ancestors[$i]][ 'parent']; $last_node_on_generation = $last_child[$up_parent]; $uptree_node_on_generation = $ancestors[$i]; if ($last_node_on_generation == $uptree_node_on_generation) { icon( "blank"); } else { icon( "line"); } } if ($child_nodes[$node]) { // has children, i.e. it is a folder $conn_icon = "plus"; $expand = true; } else { $conn_icon = "join"; $expand = false; } if ($index == $lastindex) { $conn_icon .= "bottom"; } elseif ($depth == 0 && $index == 0) { $conn_icon .= "top"; } if ($expand) { printf( "", $node); } icon($conn_icon, "connImg_$node"); if ($expand) { print( ""); } $icon = $node_data[$node][ 'icon']; if (!$icon) { $type = $node_data[$node][ 'type']; $icon = $GLOBALS[ 'dirent_icons'][$type]; } icon($icon, "nodeImg_$node"); $name = $node_data[$node][ 'name']; printf( '?%s', -1, $name, 10); if ($child_nodes[$node]) { $newdepth = $showdepth; if ($newdepth > 0) { $newdepth--; } $new_ancestors = $ancestors; $new_ancestors[] = $node; display_directory($node, $newdepth, $new_ancestors); } } print( ""); } function setup_directory($parent, $maxdepth) { global $dirent_icons, $child_nodes, $node_data, $last_child; $dirent_icons = sql_assoc('SELECT id,icon FROM dirent_types'); $query = 'SELECT id,parent,type,icon,name '. 'FROM directory '. 'ORDER BY parent,name'; $child_nodes = array(); $node_data = array(); $res = sql($query); while (list($id,$parent,$type,$icon,$name)=db_fetch_row($res)){ $child_nodes[(int)$parent][] = $id; $node_data[$id] = array( 'id' => $id, 'parent' => $parent, 'type' => $type, 'icon' => $icon, 'name' => $name); $last_child[(int)$parent] = $id; } } ?>

    希望本文所述对大家的php程序设计有所帮助。

    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/985265.htmlTechArticlephp从数据库查询结果生成树形列表的方法,查询结果树形 本文实例讲述了php从数据库查询结果生成树形列表的方法。分享给大家供大家参考...

    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:php 生成 树形列表 mysql
    上一篇:php隐藏实际地址的文件下载方法,_PHP教程 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 你知道如何用PHP实现多进程吗• PHP与MySQL连接的方法总结• 求解:phpcms模板怎样转码?该怎么解决• php 之 cookie 跟 session 简单解读(笔记)• php怎的快捷知道某个函数在哪个文件用过
    1/1

    PHP中文网