用CI怎么做个添加树形结构 急!!!!
本帖最后由 zhanglei_0202 于 2010-7-1 11:15 编辑怎么用CI做树形结构?例如:
北京----朝阳区-----四惠桥------具体地址
-----丰台区-----看丹桥------具体地址
这些东西都是自己添加的!~
那位大侠帮帮忙!~~ 关于分类算法,通常有这么两种算法,在网上很流行的
1、毗邻目录模式(adjacency list model)
2、预排序遍历树算法(modified preorder tree traversal algorithm)
OK,这两种算法google一下马上一大堆结果,原文来自mysql官方网站
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
关于这两种算法的优劣网上都有评论,我在此提供一个我自己的小小实现方法,没有涉及到mysql数据库查询的
function unlimitedSort()
{
$arrSort = array(
array(1,0),
array(2,0),
array(3,0),
array(4,2),
array(5,2),
array(6,3),
array(7,3),
array(8,6),
array(9,6)
);
var_dump($this->_listToTree($arrSort,0));
}
protected function _listToTree($arrSort,$root)
{
$tree = array();
$offset = 0;
$this->_toPretree(&$arrSort,$root,&$tree,&$offset);
return $tree;
}
protected function _toPretree(&$arrSort,$root,&$tree,&$offset)
{
$sub = $this->_getSubNode(&$arrSort,$root);
if(!empty($sub))
{
$offset ++;
$offsetChar = str_repeat('-',$offset-1);
foreach($sub as $key => $val)
{
$tree[] = $offsetChar.$val;
unset($sub[$key]);
$this->_toPretree(&$arrSort,$val,&$tree,&$offset);
}
$offset --;
}
elseif(empty($arrSort) && $offset == 1 )
{
return $tree;
}
}
protected function _getSubNode(&$arrSort,$parent)
{
$subNode = array();
foreach($arrSort as $key => $node)
{
if($node == $parent)
{
$subNode[] = $node;
unset($arrSort[$key]);
}
}
return $subNode;
}
上面是对第一种算法中数据结构的排序,$arrSort 是一个模拟数据表,当然在实现中首先需要获取数据到一个数组中,上面表示为集合{1,2{4,5},3{6{8,9},7}}。上面代码放在控制器中,运行unlimitedSort函数就可以看到结果,xdebug下生成的结果
array
0 => string '1' (length=1)
1 => string '2' (length=1)
2 => string '-4' (length=2)
3 => string '-5' (length=2)
4 => string '3' (length=1)
5 => string '-6' (length=2)
6 => string '--8' (length=3)
7 => string '--9' (length=3)
8 => string '-7' (length=2)
不能搞成树形
页:
[1]