日期:2014-05-17  浏览次数:20646 次

php如何实现公司结构图(树形结构)
大家好,

我想用php实现一个树形结构图,现在不知道如何实现。


希望能听到大家的想法和思路。如果能附上示例代码或源码就更好了!! 


提前感谢啦。

------解决方案--------------------
用二叉树来表示树,先生成后显示
------解决方案--------------------
这个树看是什么了
如果上级唯一,用无限级即可,即无限树,递归遍历即可

如果上级不唯一,那就复杂了
------解决方案--------------------
说白了,就是给定n个元素,元素之间存在一个关系(多个关系可以映射为一个关系),
无论它是什么结构,也不管上级唯一不唯一,只要是在纸上用笔能画出来的结构,
都可以表示为数据结构中的图,图可以用矩阵存储,矩阵是可以线性化的,

不妨找一本数据结构的书,浏览图论相关章节,特别是存储和创建以及遍历
------解决方案--------------------
表结构
id
companyName
parentid
这样的表结构就可以实现二叉树的保存。
至于遍历,我是取出一个父节点的所有子节点保存到缓存文件,省去以后的麻烦,至于保存我也啥好想法,我是保存数组中,类似这样的数组array('id'=>$id,'name'=>$companyName,'children'=>array($child1id,$child2id))以后再取的时候就可以很方便的取出一个父节点的所有子节点的,至于怎么判断一个节点是否是叶子节点,只需判断它所在数组的children元素是否为空就可以了
------解决方案--------------------
PHP code
//数据库记录
$result[0] = array('id'=>1,'pid'=>0,'name'=>'公司1',);
$result[1] = array('id'=>2,'pid'=>0,'name'=>'公司2');
$result[2] = array('id'=>3,'pid'=>2,'name'=>'公司2的子公司1');
$result[3] = array('id'=>4,'pid'=>1,'name'=>'公司1的子公司1');
$result[4] = array('id'=>5,'pid'=>2,'name'=>'公司2的子公司2');
$result[5] = array('id'=>6,'pid'=>3,'name'=>'公司2的子公司1的子公司1');
$result[6] = array('id'=>7,'pid'=>3,'name'=>'公司2的子公司1的子公司2');
//简易类
class tree
{
    function tree($rs,$idName,$pidName,$nodeName)
    {
        $this->idName    = $idName;
        $this->nodeName = $nodeName;
        $tree = array();
        foreach((array)$rs as $k=>$v)
        {
            $tree[$v[$pidName]][] = $v;
        }

        $this->treeArray = $tree;
    }
    function showTree($root,$deep)
    {
        if( $this->treeArray[$root] )
        {
            foreach($this->treeArray[$root] as $k=>$v)
            {
                $t = $v[$this->idName];
                $str   = str_repeat(" ",$deep*4)."|-".str_repeat("-",$deep);
                $html .="{$str}{$v[$this->nodeName]}<br/>";    
                if($this->treeArray[$t] ) 
                {
                    $gx = $deep + 1;
                    $html .= $this->showTree( $t,$gx );
                }
            }
        }
        return $html;
    }
}
$tree = new tree($result,'id','pid','name');
echo $tree->showTree(0,0);

------解决方案--------------------
探讨
搜了一下
http://www.graphviz.org/
东西是不错,不过在PHP里没办法用

引用:
Google "GraphvizDot"