!!写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多
程序运行效率很有帮助.
大概步骤如下:
首先到数据库取数据,放到一个数组,
然后把数据转化为一个树型状的数组,
最后把这个树型状的数组转为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=<&;lt;&;lt;SQL
select*frombg_catecate
SQL;
$data=$con->getAll($sql);
//print_r($data);
数据库操作我用的是pear类库。
最后的$data的数据格式如下:
&;65279;Array
(
[0]=&;gt;Array
(
[cate_Id]=&;gt;4
[cate_ParentId]=&;gt;0
[cate_Name]=&;gt;往事如风
[cate_Intro]=&;gt;记录往事
[cate_Order]=&;gt;0
[cate_Icon]=&;gt;icons/6.gif
)
[1]=&;gt;Array
(
[cate_Id]=&;gt;5
[cate_ParentId]=&;gt;0
[cate_Name]=&;gt;水煮三国
[cate_Intro]=&;gt;品位三国智慧
[cate_Order]=&;gt;0
[cate_Icon]=&;gt;icons/3.gif
)
。。。。。。
3。把上一步的数据转为树型状的数组
代码如下:
functiongetTree($data,$pId)
{
$tree='';
foreach($dataas$k=&;gt;$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的数据格式为:
&;65279;Array
(
[0]=&;gt;Array
(
[cate_Id]=&;gt;4
[cate_ParentId]=&;gt;
[cate_Name]=&;gt;往事如风
[cate_Intro]=&;gt;记录往事
[cate_Order]=&;gt;0
[cate_Icon]=&;gt;icons/6.gif
)
[1]=&;gt;Array
(
[cate_Id]=&;gt;5
[cate_ParentId]=&;gt;
[cate_Name]=&;gt;水煮三国
[cate_Intro]=&;gt;品位三国智慧
[cate_Order]=&;gt;0
[cate_Icon]=&;gt;icons/3.gif
)
[2]=&;gt;Array
(
[cate_Id]=&;gt;2
[cate_ParentId]=&;gt;Array
(
[0]=&;gt;Array
(
[cate_Id]=&;gt;8
[cate_ParentId]=&;gt;
[cate_Name]=&;gt;html
[cate_Intro]=&;gt;html学习
[cate_Order]=&;gt;0
[cate_Icon]=&;gt;icons/1.gif
)
。。。。。。。。。。。
4。把树型状数组转为html
代码如下:
functionprocHtml($tree)
{
$html='';
foreach($treeas$t)
{
if($t['cate_ParentId']=='')
{
$html.="