1
talentsnail 2012-12-17 13:03:33 +08:00 1
$result = mysql_query("SELECT * FROM iterms");
while ( $one = mysql_fetch_array($result) ) { if ($one['parent_id'] == 0){ 创建一个新条目; } else { 把该条目添加到 id == $one['parent_id']的条目; } } 哈哈,刚刚开始学编程,所以,大神别笑^_^ |
2
Brutal 2012-12-17 13:12:52 +08:00
|
3
iloveyou OP |
5
iloveyou OP 主要是格式化的问题
|
6
halida 2012-12-17 13:47:53 +08:00
我还以为是算法时间优化嘞,原来只是语法层面的。。。
|
7
enj0y 2012-12-17 13:52:00 +08:00
后面使用$json_data=json_encode($array)即可将数组转换成json数据。
|
10
iloveyou OP |
13
aveline 2012-12-17 22:48:11 +08:00
|
14
aveline 2012-12-17 22:48:21 +08:00
|
15
aveline 2012-12-17 22:49:22 +08:00
|
18
Just1n 2012-12-18 09:40:36 +08:00
可以在数据库里加两个字段(如果可以动数据库的话,并且表确实是一个严格的树形):Lft,Rgt,都为int型。
记录如下: id title parent_id Lft Rgt 0 title0 null 1 10 1 title1 0 2 5 2 title2 0 6 9 3 title3 1 3 4 4 title4 2 7 8 最底层节点永远是 Rgt-Lft==1 顶层节点永远是Lft==1 节点X的所有父节点为(假定目标节点为D): D.Lft < X.Lft && D.Rgt > X.Rgt 节点X的所有子节点为(假定目标节点为D): D.Lft > X.Lft && D.Rgt < X.Rgt 这样做的好处是,我只需要在更新表的时候做一次递归处理即可,其他时间无需递归,当然逻辑也比较清晰。 |
20
Just1n 2012-12-18 11:52:29 +08:00
@iloveyou 经不经典我还真不知道,因为我是属于半路出家,对数学算法数据结构也是菜。以上只是我以前遇到的组织架构的处理方案。
|
21
sallon88 2012-12-19 16:12:53 +08:00 2
不就是无限分类么,曾经看到过有人使用引用做的,大概是这个样子
<pre> function get_tree($items) { $tree = array(); //格式化好的树 foreach ($items as $item) if (isset($items[$item['parent_id']])) $items[$item['parent_id']]['child'][] = &$items[$item['id']]; else $tree[] = &$items[$item['id']]; return $tree; } $items = array( 1 => array('id'=>1, 'title'=>'title1', 'parent_id'=>0), 2 => array('id'=>2, 'title'=>'title2', 'parent_id'=>0), 3 => array('id'=>3, 'title'=>'title3', 'parent_id'=>1), 4 => array('id'=>4, 'title'=>'title4', 'parent_id'=>2) ); echo json_encode(get_tree($items)); </pre> |