PHP视频教学,让你更快更轻松的掌握PHP。

查看完整版本: PHP无限树形列表源码全演示(区别于树形菜单)亲写并测试

robin 2008-5-14 14:42

PHP无限树形列表源码全演示(区别于树形菜单)亲写并测试

先看效果
[attach]803[/attach]
这个就是PHP树形列表
首先先建立数据库
[php]
CREATE TABLE IF NOT EXISTS `cms_column` (
  `columnid` int(4) NOT NULL default '0',
  `columnfatherid` int(4) NOT NULL default '0',
  `columnname` varchar(100) NOT NULL default '',
   PRIMARY KEY  (`columnid`)
) ;

[/php]
[php]
INSERT INTO `cms_column` (`columnid`, `columnfatherid`, `columnname`) VALUES
(1, 0, '美丽杭州'),
(2, 0, '体育娱乐'),
(3, 1, '星球速递'),
(4, 0, '快乐童年'),
(5, 4, '喜欢各自'),
(6, 5, '发奋图强'),
(7, 2, '北京奥运'),
(9, 0, '星球追寻'),
(10, 0, '你我分享'),
(11, 0, '安静水月'),
(12, 0, '寒星点点'),
(13, 0, '月光韬晦'),
(14, 0, '韬光养晦');
[/php]
以上是表和表结构

下面是程序  我会尽量多用点注释
这个函数用来返回上面效果中─字符串
PS:这个程序经过LEO的指点,当时一下子想不到
[php]
function ReturnStr($var)
{
for($a=0;$a<=$var;$a++)
$str.="─";
return $str;
}
[/php]

这个函数就是实现无限树形列表
我利用ADODB类去实现,具体各位同志自己修改
[php]
$sql="select * from cms_column where columnfatherid=0"; //从数据库查找第一级菜单
$result=$DB->Execute($sql);
echo"<select name=\"select\" id=\"select\">";
function ShowMenu($result)
{
global $DB;

while($menu=$result->FetchRow())//开始输出菜单输出菜单循环
{
static $layer=0; //很重要 这个static变量,用在输出菜单名字前的─的个数
//static $str;
  echo "<option>";
  echo ReturnStr($layer).$menu[columnname];
        echo "</option>"; //开始第一级菜单
  $sql="select * from cms_column where columnfatherid=$menu[columnid]"; //查找不是第一级的菜单,有FATHERID的
  $result_sub=$DB->Execute($sql);
  if($result_sub->RecordCount()>0)
  {
     $layer++;
   ShowMenu($result_sub);  //递归 输出第二,第三等等无限级列表
  }

}
$layer--;
}
if($result->RecordCount()>0) ShowMenu($result);
echo "</select>";
[/php]
好了  大家去现实吧 有问题下面跟贴
在接下来
我还将推出PHP无限树形菜单的演示

lipeng8821 2008-5-14 23:53

我怎么搞不定啊 所所。。。
[php]
<?php
   function ReturnStr($var)
   {
        for($a=0;$a<=$var;$a++){
     $str.="--";
     return $str;
  }
   }
   $link=mysql_connect("localhost","root","8821") or die("Can not link mysql".mysql_error());
   mysql_select_db("shu") or die("can not select table".mysql_error());
   mysql_query("set names 'gb2312'");
   $sql="select * from shubiao where fatherid=0";
   $result=mysql_query($sql) or die("执行数据失败".mysql_error());
   echo"<select name=\"select\" id=\"select\">";
   function ShowMenu($result){

      while($row=mysql_fetch_array($result)){
     static $layer=0;
  echo"<option>";
  echo ReturnStr($layer).$row["name"];
  echo"</option >";
  $sql="select * from shubiao where fatherid=$row[id]";
  $result=mysql_query($sql);
  $row=mysql_num_rows($result);
  if($row>0){
    $layer++;
    ShowMenu($result);
  }
   }
   $layer--;
   }
   if($row>0) ShowMenu($result);
   echo"</select>";
?>
[/php]

lipeng8821 2008-5-14 23:55

帮我看看 那里错了

lipeng8821 2008-5-15 00:35

哦 知道了 哈哈  有两个$result了 。。系统搞不清除了。。哈哈

leo 2008-5-15 08:25

ReturnStr

[code]<?php
function ReturnStr($var,$str="-")
{
$Rstr="";
if($var>0&&$var<>""&&$str<>""){
    for($a=0;$a<$var;$a++)
   $Rstr.=$str;
}
return $Rstr;
}
?>[/code]
使用方法:
[php]echo ReturnStr(1,"--");
输出结果:
--[/php]

蚂蚁 2008-5-15 10:24

跟小所哥哥上回发的那个程序好像

robin 2008-5-15 10:53

因为道理是一样的
都是用到递归的方法来实现
记得上次面试的时候
问此类实现除了递归外还有其他的没?
当时蒙了
不知道除递归外还有别的显示无限树形菜单或列表的方法没?

lipeng8821 2008-5-15 12:18

我发现 LEO 发的 那个函数可以用  所所发的那个函数就不行  怎么搞的

robin 2008-5-15 12:33

你不是已经行了吗?

zxcvva 2008-8-27 11:17

:03: :03: :03: 有点看不懂。。。 哎。还需要努力。。
页: [1]
查看完整版本: PHP无限树形列表源码全演示(区别于树形菜单)亲写并测试