原帖由 Muddle 于 2008-9-25 11:34 发表 
我说一下早前我采用的简单办法
1 后代分类ID的取得
这种实现因为有许多分支,使用数组处理非常难,很难避免使用到递归。
我的做法是使用递归生成缓存。比如 ID 1 的后代分类有 { 2, 5, 7 ,8, 30} 之类的 ...
1 后代分类ID的取得用数组处理有啥难的?以楼主的数据为例,假设我想要的自己的全部子孙(包括自己)
[php]
//将数据转化成数组,很容易做到
$a_list = array(
1=>array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
2=>array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
3=>array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
4=>array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
5=>array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
6=>array('ID'=>6, 'PARENT'=>5, 'NAME'=>'孙子'),
7=>array('ID'=>7, 'PARENT'=>2, 'NAME'=>'姐妹'),
8=>array('ID'=>8, 'PARENT'=>3, 'NAME'=>'表亲'),
9=>array('ID'=>9, 'PARENT'=>7, 'NAME'=>'甥儿'),
10=>array('ID'=>10, 'PARENT'=>4, 'NAME'=>'女儿'),
11=>array('ID'=>11, 'PARENT'=>10, 'NAME'=>'外孙'),
12=>array('ID'=>12, 'PARENT'=>5, 'NAME'=>'孙女')
);
//将数组转变成树,因为使用了引用,所以不会占用太多的内存,一行代码搞定
foreach ($a_list as $id => $item) if ($item['PARENT']) $a_list[$item['PARENT']][$item['ID']] = &$a_list[$id];
//获得自己的全部子孙,自己的ID为4
print_r($a_list[4]);
//结果如下:
/*
Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 儿子
[6] => Array
(
[ID] => 6
[PARENT] => 5
[NAME] => 孙子
)
[12] => Array
(
[ID] => 12
[PARENT] => 5
[NAME] => 孙女
)
)
[10] => Array
(
[ID] => 10
[PARENT] => 4
[NAME] => 女儿
[11] => Array
(
[ID] => 11
[PARENT] => 10
[NAME] => 外孙
)
)
)
*/
[/php] |