php树形菜单数据库设计 php 树结构

php难题(php 树形菜单)

//如果一级菜单存在则开始菜单的显示

超过十余年行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:成都网站设计、成都做网站,成都网站推广,成都网站优化,整体网络托管,小程序制作,微信开发,App定制开发,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!

if(mysql_num_rows($result)0) ShowTreeMenu($Con,$result,$layer,$ID);

//=============================================

//显示树型菜单函数 ShowTreeMenu($con,$result,$layer)

//$con:数据库连接

//$result:需要显示的菜单记录集

//layer:需要显示的菜单的级数

//=============================================

function ShowTreeMenu($Con,$result,$layer)

{

//取得需要显示的菜单的项目数

$numrows=mysql_num_rows($result);

//开始显示菜单,每个子菜单都用一个表格来表示

echo "table cellpadding='0' cellspacing='0' border='0'";

for($rows=0;$rows$numrows;$rows++)

{

//将当前菜单项目的内容导入数组

$menu=mysql_fetch_array($result);

//提取菜单项目的子菜单记录集

$sql="select * from wiki where pid=$menu[cid]";

这是你的代码。

如数据菜单

1 一级一 0

2 一级二 0

3 一级一下一 1

4 一级一下二 1

一级一

一级一下一

一级一下二

一级二

生成菜单是这样。

$sql="SELECT * FROM wiki where pid=0";

取出上表 1 2 赋予 $menu[cid]; 然后在查询出 父级id 下的 菜单!

$sql="select * from wiki where pid=$menu[cid]";

PHP递归树形菜单

可以参考以下代码,但需要把你自己的数据库链接,表等改一下就可以了

html

head

link href='style.css' rel=stylesheet

meta http-equiv="Content-Type" content="text/html; charset=utf-8" /

script language="JavaScript" src="TreeMenu.js"/script

/head

body

?php

//基本变量设置

$GLOBALS["ID"] =1; //用来跟踪下拉菜单的ID号

$layer=1; //用来跟踪当前菜单的级数

//连接数据库

$Con=mysql_connect("localhost","root","1234");

mysql_select_db("wiki");

//提取一级菜单

$sql="SELECT * FROM wiki where pid=0";

$result=mysql_query($sql,$Con);

//如果一级菜单存在则开始菜单的显示

if(mysql_num_rows($result)0) ShowTreeMenu($Con,$result,$layer,$ID);

//=============================================

//显示树型菜单函数 ShowTreeMenu($con,$result,$layer)

//$con:数据库连接

//$result:需要显示的菜单记录集

//layer:需要显示的菜单的级数

//=============================================

function ShowTreeMenu($Con,$result,$layer)

{

//取得需要显示的菜单的项目数

$numrows=mysql_num_rows($result);

//开始显示菜单,每个子菜单都用一个表格来表示

echo "table cellpadding='0' cellspacing='0' border='0'";

for($rows=0;$rows$numrows;$rows++)

{

//将当前菜单项目的内容导入数组

$menu=mysql_fetch_array($result);

//提取菜单项目的子菜单记录集

$sql="select * from wiki where pid=$menu[cid]";

$result_sub=mysql_query($sql,$Con);

echo "tr";

//如果该菜单项目有子菜单,则添加JavaScript onClick语句

if(mysql_num_rows($result_sub)0)

{

echo "td width='20'img src='folder.gif' border='0'/td";

echo "td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'";

}

else

{

echo "td width='20'img src='file.gif' border='0'/td";

echo "td class='Menu'";

}

//如果该菜单项目没有子菜单,并指定了超级连接地址,则指定为超级连接,

//否则只显示菜单名称

//if($menu[url]!="")

//echo "a href='$menu[cid]'$menu[name]/a";

//else

echo $menu['name'];

echo "

/td

/tr

";

//如果该菜单项目有子菜单,则显示子菜单

if(mysql_num_rows($result_sub)0)

{

//指定该子菜单的ID和style,以便和onClick语句相对应

echo "tr id=Menu".$GLOBALS["ID"]++." style='display:none'";

echo "td width='20' /td";

echo "td";

//将级数加1

$layer++;

//递归调用ShowTreeMenu()函数,生成子菜单

ShowTreeMenu($Con,$result_sub,$layer);

//子菜单处理完成,返回到递归的上一层,将级数减1

$layer--;

echo "/td/tr";

}

//继续显示下一个菜单项目

}

echo "/table";

}

?

/body

/html

用php调数据库做树状显示

数据库设计的时候,通常的做法是用父ID来解决树状结构,也有二叉树等等

id  pid category_name

然后,用递归就能实现,也有引用数组的方式

?php

/**

* 此方法由@Tonton 提供

* @date 2012-12-12 

*/

function genTree5($items) { 

foreach ($items as $item) 

$items[$item['pid']]['son'][$item['id']] = $items[$item['id']]; 

return isset($items[0]['son']) ? $items[0]['son'] : array(); 

/**

* 将数据格式化成树形结构

* @author Xuefen.Tong

* @param array $items

* @return array 

*/

function genTree9($items) {

$tree = array(); //格式化好的树

foreach ($items as $item)

if (isset($items[$item['pid']]))

$items[$item['pid']]['son'][] = $items[$item['id']];

else

$tree[] = $items[$item['id']];

return $tree;

}

$items = array(

1 = array('id' = 1, 'pid' = 0, 'name' = '江西省'),

2 = array('id' = 2, 'pid' = 0, 'name' = '黑龙江省'),

3 = array('id' = 3, 'pid' = 1, 'name' = '南昌市'),

4 = array('id' = 4, 'pid' = 2, 'name' = '哈尔滨市'),

5 = array('id' = 5, 'pid' = 2, 'name' = '鸡西市'),

6 = array('id' = 6, 'pid' = 4, 'name' = '香坊区'),

7 = array('id' = 7, 'pid' = 4, 'name' = '南岗区'),

8 = array('id' = 8, 'pid' = 6, 'name' = '和兴路'),

9 = array('id' = 9, 'pid' = 7, 'name' = '西大直街'),

10 = array('id' = 10, 'pid' = 8, 'name' = '东北林业大学'),

11 = array('id' = 11, 'pid' = 9, 'name' = '哈尔滨工业大学'),

12 = array('id' = 12, 'pid' = 8, 'name' = '哈尔滨师范大学'),

13 = array('id' = 13, 'pid' = 1, 'name' = '赣州市'),

14 = array('id' = 14, 'pid' = 13, 'name' = '赣县'),

15 = array('id' = 15, 'pid' = 13, 'name' = '于都县'),

16 = array('id' = 16, 'pid' = 14, 'name' = '茅店镇'),

17 = array('id' = 17, 'pid' = 14, 'name' = '大田乡'),

18 = array('id' = 18, 'pid' = 16, 'name' = '义源村'),

19 = array('id' = 19, 'pid' = 16, 'name' = '上坝村'),

);

echo "pre";

print_r(genTree5($items));

print_r(genTree9($items));

?

我想用PHP生成一个家谱树,数据库应该怎么设计?

一个表就够了

id——每个人的id

fid——如果有值 就是父亲的id

hid——如果有值 就是丈夫的id

wid——如果有值 就是妻子的id

其他字段:姓名 性别 出生日期 等等


分享文章:php树形菜单数据库设计 php 树结构
本文网址:http://ybzwz.com/article/dojgphh.html