大概步骤如下:
首先到数据库取数据,放到一个数组,
然后把数据转化为一个树型状的数组,
最后把这个树型状的数组转为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样式,效果如下: