1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php 数据库 无限级菜单 php实现无限级树型菜单(函数递归算法)[一]

php 数据库 无限级菜单 php实现无限级树型菜单(函数递归算法)[一]

时间:2021-02-18 05:08:28

相关推荐

php 数据库 无限级菜单 php实现无限级树型菜单(函数递归算法)[一]

大概步骤如下:

首先到数据库取数据,放到一个数组,

然后把数据转化为一个树型状的数组,

最后把这个树型状的数组转为html代码。

也可以将第二步和第三步合为一步。

详细如下:

1。数据库设计:

脚本如下:

CREATETABLE`bg_cate`(

`cate_Id`int(30)unsignedNOTNULLAUTO_INCREMENT,

`cate_ParentId`int(30)unsignedDEFAULT‘0’,

`cate_Name`varchar(100)NOTNULL,

`cate_Intro`varchar(500)DEFAULTNULL,

`cate_Order`int(30)unsignedDEFAULT‘0’,

`cate_Icon`varchar(100)DEFAULTNULL,

PRIMARYKEY(`cate_Id`)

)ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=34;

—导出表中的数据`bg_cate`

INSERTINTO`bg_cate`(`cate_Id`,`cate_ParentId`,`cate_Name`,`cate_Intro`,`cate_Order`,`cate_Icon`)VALUES

(4,0,‘往事如风’,‘记录往事’,0,‘icons/6.gif’),

(5,0,‘水煮三国’,‘品位三国智慧’,0,‘icons/3.gif’),

(2,0,‘技术学习’,‘平时学习的一些笔记,欢迎批评指正。’,0,‘icons/18.gif’),

(3,0,‘生活点滴’,‘记录生活点滴’,0,‘icons/2.gif’),

(6,0,‘栀子花开’,‘青春无限’,0,‘icons/8.gif’),

(7,0,‘假日休闲’,‘悠闲、自在’,0,‘icons/24.gif’),

(8,2,‘html’,‘html学习’,0,‘icons/1.gif’),

(9,2,‘css’,‘css学习’,0,‘icons/1.gif’),

(10,2,‘php’,‘php学习’,0,‘icons/18.gif’),

(11,10,‘php基础知识’,‘php基础知识’,0,‘icons/1.gif’),

(12,10,‘oop’,‘oop’,0,‘icons/1.gif’),

(13,10,‘php安全’,‘讲述php安全’,0,‘icons/1.gif’),

(14,10,‘seagullframework’,‘seagullframework’,0,‘icons/1.gif’),

(15,2,‘javascript’,‘javascript学习’,0,‘icons/1.gif’),

(16,2,‘设计模式’,NULL,0,‘icons/1.gif’),

(17,2,‘软件工程’,‘软件工程学习’,0,‘icons/1.gif’),

(18,3,‘厦门生活’,‘厦门生活’,0,‘icons/8.gif’),

(19,3,‘大学生活’,‘大学生活’,0,‘icons/8.gif’),

(20,3,‘童年生活’,‘童年生活’,0,‘icons/15.gif’),

(21,19,‘学习’,‘学习’,0,‘icons/1.gif’),

(22,19,‘运动’,‘运动’,0,‘icons/16.gif’),

(23,19,‘旅游’,‘旅游’,0,‘icons/24.gif’),

(24,22,‘排球’,‘排球’,0,‘icons/9.gif’),

(25,22,‘篮球’,‘篮球’,0,‘icons/9.gif’),

(26,22,‘羽毛球’,‘羽毛球’,0,‘icons/9.gif’),

(27,22,‘乒乓球’,‘乒乓球’,0,‘icons/9.gif’);

2。到数据库取数据,放到数组。

require_once‘./classes/MyDB.php’;

$con=MyDB::singleton();

$sql=<<

select*frombg_catecate

SQL;

$data=$con->getAll($sql);

//print_r($data);

数据库操作我用的是pear类库。

最后的$data的数据格式如下:

Array

(

[0]=>Array

(

[cate_Id]=>4

[cate_ParentId]=>0

[cate_Name]=>往事如风

[cate_Intro]=>记录往事

[cate_Order]=>0

[cate_Icon]=>icons/6.gif

)

[1]=>Array

(

[cate_Id]=>5

[cate_ParentId]=>0

[cate_Name]=>水煮三国

[cate_Intro]=>品位三国智慧

[cate_Order]=>0

[cate_Icon]=>icons/3.gif

)

。。。。。。

3。把上一步的数据转为树型状的数组

代码如下:

functiongetTree($data,$pId)

{

$tree=”;

foreach($dataas$k=>$v)

{

if($v[‘cate_ParentId’]==$pId)

{//父亲找到儿子

$v[‘cate_ParentId’]=getTree($data,$v[‘cate_Id’]);

$tree[]=$v;

//unset($data[$k]);

}

}

return$tree;

}

$tree=getTree($data,0);

最后输出$tree的数据格式为:

Array

(

[0]=>Array

(

[cate_Id]=>4

[cate_ParentId]=>

[cate_Name]=>往事如风

[cate_Intro]=>记录往事

[cate_Order]=>0

[cate_Icon]=>icons/6.gif

)

[1]=>Array

(

[cate_Id]=>5

[cate_ParentId]=>

[cate_Name]=>水煮三国

[cate_Intro]=>品位三国智慧

[cate_Order]=>0

[cate_Icon]=>icons/3.gif

)

[2]=>Array

(

[cate_Id]=>2

[cate_ParentId]=>Array

(

[0]=>Array

(

[cate_Id]=>8

[cate_ParentId]=>

[cate_Name]=>html

[cate_Intro]=>html学习

[cate_Order]=>0

[cate_Icon]=>icons/1.gif

)

。。。。。。。。。。。

4。把树型状数组转为html

代码如下:

functionprocHtml($tree)

{

$html=”;

foreach($treeas$t)

{

if($t[‘cate_ParentId’]==”)

{

$html.=“

{$t[‘cate_Name’]}”;

}

else

{

$html.=“

”.$t[‘cate_Name’];

$html.=procHtml($t[‘cate_ParentId’]);

$html=$html.”

”;

}

}

return$html?‘

’.$html.'’:$html;

}

echoprocHtml($tree);

输出的html的代码格式为:

往事如风水煮三国技术学习htmlcssphpphp基础知识oopphp安全

。。。。。。。。。。。。。。。。

5。也可以把第3和第4步的代码合在一起,代码如下:

functiongetTree($data,$pId)

{

$html=”;

foreach($dataas$k=>$v)

{

if($v[‘cate_ParentId’]==$pId)

{//父亲找到儿子

$html.=“

”.$v[‘cate_Name’];

$html.=getTree($data,$v[‘cate_Id’]);

$html=$html.”

”;

}

}

return$html?‘

’.$html.'’:$html;

}

echogetTree($data,0);

6。最后再加点css样式,效果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。