加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 02:34:21 所属栏目:PHP教程 来源:网络整理
导读:《:php从数据库查询结果生成树形列表的方法》要点: 本文介绍了:php从数据库查询结果生成树形列表的方法,希望对您有用。如果有疑问,可以联系我们。 PHP学习 本篇章节讲解php从数据库查询结果生成树形列表的办法.供大家参考研究.具体分析如下:

《:php从数据库查询结果生成树形列表的方法》要点:
本文介绍了:php从数据库查询结果生成树形列表的方法,希望对您有用。如果有疑问,可以联系我们。

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),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,name);
 EXEC SQL DROP c_insert;
END";
CALL insert_dir_entry('My Computer',NULL,1);
CALL insert_dir_entry('Network Neighbourhood',1);
CALL insert_dir_entry('lucifer.guardian.no',2,1);
CALL insert_dir_entry('rafael.guardian.no',1);
CALL insert_dir_entry('uriel.guardian.no',1);
CALL insert_dir_entry('Control Panel',1);
CALL insert_dir_entry('Services',6,1);
CALL insert_dir_entry('Apache',7,2);
CALL insert_dir_entry('Solid Server 2.2',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( '<img%s border=0 align=top src="/pics/menu/%s.gif" '.
 'width="%d" height="%d">',$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( '<div id="node_%d" class="dirEntry" visibility="%s">',$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( "<a href="document.layers['node_%d'].visibility='show'">",$node);
 }
 icon($conn_icon,"connImg_$node");
 if ($expand) {
 print( "</a>");
 }
 $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( '?<font size="%d">%s</font><br%c>',-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( "</divn>");
}
function setup_directory($parent,$maxdepth)
{
 global $dirent_icons,$child_nodes,$last_child;
 $dirent_icons = sql_assoc('SELECT id,icon FROM dirent_types');
 $query = 'SELECT id,icon,name '.
 'FROM directory '.
 'ORDER BY parent,name';
 $child_nodes = array();
 $node_data = array();
 $res = sql($query);
 while (list($id,$type,$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程序设计有所赞助.

《:php从数据库查询结果生成树形列表的方法》是否对您有启发,欢迎查看更多与《:php从数据库查询结果生成树形列表的方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读