php树形构造的算法(一)[网站编程]
本文“php树形构造的算法(一)[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
产品分类,多级的树状构造的论坛,邮件列表等很多地方我们城市碰到这样的问题:若何存储多级构造的数据?
在PHP的利用中,供应后台数据存储的普通是关系型数据库,它可以保存大量的数据,供应高效的数据检索和更新服务.但是关系型数据的基本情势是纵横交叉的表,是一个平面的构造,假如要将多级树状构造存储在关系型数据库里就需求举行公道的翻译工作.接下来我会将自己的所见所闻和一些实用的经验和大家探究一下.
层级构造的数据保存在平面的数据库中基本上有两种常用计划办法:
毗邻目录情势(adjacency list model)
预排序遍历树算法(modified preorder tree traversal algorithm)
我不是计算机专业的,也没有学过什么数据构造的东西,所以这两个名字都是我自己按照字面的意思翻的,假如说错了还请多多指教.
这两个东西听着仿佛很吓人,其实非常简单理解.这里我用一个简单食物目录作为我们的示例数据. 我们的数据构造是这样的:
Food
|
|---Fruit
| |
| |---Red
| | |
| | |--Cherry
| |
| |---Yellow
| |
| |--Banana
|
|---Meat
|
|--Beef
|
|--Pork
为了照护那些英文一塌胡涂的PHP爱好者
Food:食物
Fruit:生果
Red:红色
Cherry:樱桃
Yellow:黄色
Banana:香蕉
Meat:肉类
Beef:牛肉
Pork:猪肉
毗邻目录情势(adjacency list model)
这种情势我们常常用到,很多的教程和书中也介绍过.我们通过给每个节点增添一个属性 parent 来表示这个节点的父节点从而将整个树状构造通过平面的表描写出来.按照这个原则,例子中的数据可以转化成以下的表:
+-----------------------+
| parent | name |
+-----------------------+
| | Food |
| Food | Fruit |
| Fruit | Green |
| Green | Pear |
| Fruit | Red |
| Red | Cherry |
| Fruit | Yellow |
| Yellow | Banana |
| Food | Meat |
| Meat | Beef |
| Meat | Pork |
+-----------------------+
我们看到 Pear 是Green的一个子节点,Green是Fruit的一个子节点.而根节点'Food'没有父节点. 为了简单地描写这个问题, 这个例子中只用了name来表示一个记录. 在实际的数据库中,你需求用数字的id来标示每个节点,数据库的表构造大约应当像这样:id, parent_id, name, description.有了这样的表我们便可以通过数据库保存整个多级树状构造了.
以上是“php树形构造的算法(一)[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |