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

本文演示了PHP从数据库查询结果生成树列表的方法,供大家参考,具体分析如下:

此代码可以读取数据库中的数据,生成与Windows资源管理器类似的树列表。
< PHP
下面是我在这个代码中使用的数据库定义*(实心)。
*将它调整到另一个数据库并不难。
* /
*
创建表(dirent_types
id整数不为空,
图标varchar(50),
名称varchar(50),
主键(id)
);
插入dirent_types值(1,'folderclosed ','directory);
插入dirent_types值(2,'document '文件');
创建表(目录
id整数不为空,
父整数引用目录(id),
名称varchar(200),
图标varchar(50),
整数类型的引用dirent_types(ID),
URL varchar(200),
主键(id)
);
directory_idx下降指数;
创建目录索引directory_idx(父母,名字);
创建序列dirent_id;
创建程序insert_dir_entry
(name varchar、母的整数,整数类型)
返回(id整数)
开始
当一个SQL语句中止;
执行序列dirent_id.next ID;
执行sql语句c_insert
插入目录
(ID、父级、类型、名称)
值(,);
SQL执行语句c_insert使用(ID,家长,类型,名称);
EXEC SQL降c_insert;

电话insert_dir_entry(我的电脑,null,1);
电话insert_dir_entry(网络邻居,null,1);
电话insert_dir_entry('lucifer。守护。不,2, 1);
电话insert_dir_entry('rafael。守护。不,2, 1);
电话insert_dir_entry('uriel。守护。不,2, 1);
电话insert_dir_entry(控制面板,null,1);
电话insert_dir_entry('services ',6, 1);
电话insert_dir_entry('apache ',7, 2);
电话insert_dir_entry('solid服务器2.2,7, 2);
* /
函数图标($图标,$ =,$ = 0,$高度= 0){
全球document_root美元;
icon_loc美元= / /菜单的照片
文件大小=document_root美元美元美元icon_loc /图标。gif;
如果| | { $($宽度高度!!)
iconinfo美元= getimagesize(文件);
如果(!宽度){
宽度=美元美元iconinfo { 0 };
}
如果(!高度){
高度=美元美元iconinfo { 1 };
}
}
printf(图片菜单为s.webp 。
宽度=%d高度$
$图标,宽度,高度);
}
功能display_directory(合母,showdepth = 0美元美元,祖先= false){
全球child_nodes node_data美元,美元,美元last_child;
复位($ child_nodes { $母});
大小= sizeof(美元美元美元child_nodes {母});
lastIndex =美元1美元规模;
如果(!$祖先){
祖先=数组();
}
为深度= sizeof($的祖先);
printf(,
为父母,showdepth美元> 0'show:'hide);
而(表(美元指数,美元结)=每($ child_nodes { $母})){
($ i = 0;$ i $深度;$ + +){
up_parent美元=(int)node_data美元美元美元{ { } } {我祖先'parent};
last_node_on_generation美元美元美元last_child up_parent } = {;
uptree_node_on_generation =美元美元美元} {我的祖先;
如果($ last_node_on_generation = = $ uptree_node_on_generation){
图标(空白);
{人}
图标(行);
}
}
如果($ child_nodes { $节点}){
也就是说,它有子文件夹。
conn_icon美元= 和;
$扩展=真;
{人}
conn_icon美元=加入;
$扩展= false;
}
如果(美元指数= = $ lastIndex){
conn_icon美元=底;
($深度= = 0 } { $指数= = 0)
conn_icon美元=顶;
}
如果($扩展){
printf(
}
图标(conn_icon美元,connimg_ $节点);
如果($扩展){
打印();
}
$icon = $node_data{$node}{'icon'};
如果(!$图标){
美元美元美元node_data型= { } { }节点类型;
$图标=美元'dirent_icons} { $全局{类型};
}
图标($图标,nodeimg_ $节点);
$name = { } {节点node_data美元美元'name' };
printf(%s,1美元的名字,10);
如果($ child_nodes { $节点}){
newdepth = showdepth美元美元;
如果($ newdepth > 0){
newdepth美元--;
}
new_ancestors美元= $的祖先;
new_ancestors美元{ } = $节点;
display_directory(合结,newdepth美元,美元new_ancestors);
}
}
打印();
}
功能setup_directory(合母MAXDEPTH美元)
{
全球dirent_icons美元,child_nodes美元美元美元,node_data,last_child;
dirent_icons美元= sql_assoc('select ID,图标从dirent_types);
为查询= 'select ID,家长式、图标、名称。
从目录。
父母的命令,姓名;
child_nodes美元=阵();
node_data美元=阵();
$ = SQL($查询);
而(列表($id,美元美元美元的母型,图标,$name)= db_fetch_row($ RES)){
child_nodes美元{(int)母} { } =美元美元的ID;
node_data美元{ $ ID } =阵列('id' = > $id,
父= $父,
类型$ $类型,
图标= $图标,
name = $ name);
last_child美元{(int)$母} = $id;
}
}
>
希望本文能对大家的PHP程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部