|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
大家如果能懂得“熟能生巧”的道理也就明白了这并不是浪费时间,同时这也可以减轻板主的负担,让他们有时间去处理更难的问题。法式 1.递归法
递归是指在函数中显式的挪用它本身。
使用递归法完成树状布局的特色是写入数据速度较快,显示速度较慢(在树的分支/条理较多的情形下特别分明)。合用与写入数据量大,树的布局庞杂的情形下。
数据布局(以mysql为例) 代码:
CREATE TABLE `tree1` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`parentid` tinyint(3) unsigned NOT NULL default '0',
`topic` varchar(50) default NULL,
PRIMARY KEY (`id`),
KEY `parentid` (`parentid`)
) TYPE=MyISAM;
INSERT INTO `tree1` (`id`, `parentid`, `topic`) valueS
(1,0,'树1'),
(2,0,'树2'),
(3,0,'树3'),
(4,2,'树2-1'),
(5,4,'树2-1-1'),
(6,2,'树2-2'),
(7,1,'树1-1'),
(8,1,'树1-2'),
(9,1,'树1-3'),
(10,8,'树1-2-1'),
(11,7,'树1-1-1'),
(12,11,'树1-1-1-1');
字段申明
id,纪录的id号
parentid,纪录的父纪录id(为0则为根纪录)
topic,纪录的显示题目
显示法式
按次树:
PHP:
<?
/* 数据库毗连 */
mysql_connect();
mysql_select_db('tree');
/* 树状显示的递归函数 */
function tree($parentid = 0) {
/*履行sql查询,获得纪录的题目和id*/
$sql = "select topic,id from tree1 where
parentid = $parentid order by id asc";
$rs = mysql_query($sql);
/* 缩进*/
echo("<ul>");
while($ra = mysql_fetch_row($rs)) {
/* 显示纪录题目 */
echo('<li>'.$ra[0].'</li>');
/* 递归挪用 */
tree($ra[1]);
}
echo("</ul>");
}
tree();
?>
逆序树:
PHP:
<?
/* 数据库毗连 */
mysql_connect();
mysql_select_db('tree');
/* 树状显示的递归函数 */
function tree($parentid = 0) {
/*履行sql查询,获得纪录的题目和id*/
$sql = "select topic,id from tree1 where parentid
= $parentid order by id desc";
$rs = mysql_query($sql);
/* 缩进*/
echo("<ul>");
while($ra = mysql_fetch_row($rs)) {
/* 显示纪录题目 */
echo('<li>'.$ra[0].'</li>');
/* 递归挪用 */
tree($ra[1]);
}
echo("</ul>");
}
tree();
?>
拔出数据法式
PHP:
<?
/* 数据库毗连 */
mysql_connect();
mysql_select_db('tree');
$sql = "insert into tree (topic,parentid) values('树3-1',3);";
mysql_query($sql);
?>
2.排序字段法
此办法是经由过程在数据布局中增添一个标记纪录在全部树中的按次地位的字段来完成的。特色是显示速度和效力高。但在单个树的布局庞杂的情形下,数据写入效力有所缺乏。并且按次分列时分,拔出,删除纪录的算法过于庞杂,故凡是用逆序分列。
数据布局(以mysql为例)
代码:
CREATE TABLE `tree2` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`parentid` tinyint(3) unsigned NOT NULL default '0',
`rootid` tinyint(3) unsigned NOT NULL default '0',
`layer` tinyint(3) unsigned NOT NULL default '0',
`orders` tinyint(3) unsigned NOT NULL default '0',
`topic` varchar(50) default NULL,
PRIMARY KEY (`id`),
KEY `parentid` (`parentid`),
KEY `rootid` (`rootid`)
) TYPE=MyISAM
INSERT INTO `tree2` (`id`, `parentid`, `rootid`,
`layer`, `orders`, `topic`) valueS
(1,0,1,0,0,'树1'),
(2,0,2,0,0,'树2'),
(3,0,3,0,0,'树3'),
(4,2,2,1,2,'树2-1'),
(5,4,2,2,3,'树2-1-1'),
(6,2,2,1,1,'树2-2'),
(7,1,1,1,4,'树1-1'),
(8,1,1,1,2,'树1-2'),
(9,1,1,1,1,'树1-3'),
(10,8,1,2,3,'树1-2-1'),
(11,7,1,2,5,'树1-1-1'),
(12,11,1,3,6,'树1-1-1-1');
显示法式
PHP:
<?
/* 数据库毗连 */
mysql_connect();
mysql_select_db('tree');
/* 选出一切根纪录id */
$sql = "select id from tree2 where parentid = 0 order by id desc";
$rs = mysql_query($sql);
echo("<ul>");
$lay = 0;
while($ra = mysql_fetch_row($rs)) {
echo("<ul>");
/* 选出此树一切纪录,并按orders字段排序 */
$sql = "select topic,layer from tree2 where
rootid = $ra[0] order by orders";
$rs1 = mysql_query($sql);
while($ra1 = mysql_fetch_row($rs1)) {
/* 缩进显示 */
if($ra1[1]>$lay) {
echo(str_repeat("<ul>",$ra1[1]-$lay));
}elseif($ra1[1]<$lay) {
echo(str_repeat("</ul>",$lay-$ra1[1]));
}
/* 纪录显示 */
//echo("$ra1[1]>$lay");
echo("<li>$ra1[0]</li>");
$lay = $ra1[1];
}
echo("</ul>");
}
echo("</ul>");
?>
拔出数据法式
PHP:
<?
/* 数据库毗连 */
mysql_connect();
mysql_select_db('tree');
/* 拔出根纪录 */
$sql = "insert into tree2 (topic) values ('树5')";
mysql_query($sql);
$sql = "update tree2 set rootid = id where id = ".mysql_insert_id();
mysql_query($sql);
/* 拔出子纪录 */
$parentid = 5;//父纪录id
/* 掏出 根纪录id,父纪录缩进条理,父纪录按次地位 */
$sql = "select rootid,layer,orders from tree2 where id = $parentid";
list($rootid,$layer,$orders) = mysql_fetch_row(mysql_query($sql));
/* 更新拔出地位跋文录的orders值 */
$sql = "update tree2 set orders = orders + 1 where orders > $orders";
mysql_query($sql);
/* 拔出纪录 */
$sql = "insert into tree2 (rootid,parentid,orders,
layer,topic) values ($rootid,$parentid,".($orders+1).",".($layer+1).",'树2-1-1-2')";
mysql_query($sql);?>
理解网站这一概念之后不难看出,任何网站都是由网页组成的,也就是说想完成网站,必须先学会做网页,因此必须要掌握了HTML,才能为今后制作网站打下基础。 |
|