
1 talentsnail 2012-12-17 13:03:33 +08:00 $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 我还以为是算法时间优化嘞,原来只是语法层面的。。。 |
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 不就是无限分类么,曾经看到过有人使用引用做的,大概是这样子 <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> |