大家好,我想用php实现一个树形结构图,现在不知道如何实现。
希望能听到大家的想法和思路。如果能附上示例代码或源码就更好了!! 
提前感谢啦。

解决方案 »

  1.   

    CREATE TABLE `cg_tree_t` (
      `id` int(3) NOT NULL auto_increment,
      `name` varchar(50) NOT NULL default '',
      `parentID` varchar(50) NOT NULL default '',
      UNIQUE KEY `id` (`id`)
    ) TYPE=MyISAM COMMENT='树型' AUTO_INCREMENT=37 ;
      

  2.   

    还有就是open flash chart能不能做org chart? 因为我从来没用过gd库。
      

  3.   

    哪位有好的建议?看了好多资料,不确定哪种最好用。需要有经验的同仁指导。1. 预先序遍历生成树
    2. graphviz
    3. flash
    4. xml急!!! 
      

  4.   

    表结构
    id
    companyName
    parentid
    这样的表结构就可以实现二叉树的保存。
    至于遍历,我是取出一个父节点的所有子节点保存到缓存文件,省去以后的麻烦,至于保存我也啥好想法,我是保存数组中,类似这样的数组array('id'=>$id,'name'=>$companyName,'children'=>array($child1id,$child2id))以后再取的时候就可以很方便的取出一个父节点的所有子节点的,至于怎么判断一个节点是否是叶子节点,只需判断它所在数组的children元素是否为空就可以了
      

  5.   

    用mysql实现应该可以的吧
    父ID
    子ID用php的话用数组吧 
      

  6.   


    谢谢你的回复,我觉得你的方法还挺实用。可是这里的结构不是二叉树,一个parent下有多个children。 这样的情况,该如何解决?
      

  7.   


    左子树表示children, 右子树表示sibling
      

  8.   

    谢谢,现在已经得到缩进的结构了。像这样,我再想怎么形成树状呢。
    directeur general
    directeurs des projets/realisations
    chef de projets
    Adjoint chef de projet
    Directeur commercial
    customer manager
    tendence manager
    Engineering
    Responsable offre techniques/ Ingenieurs offre
    Responsable mecanique
    Responsable electrique
    Responsable procedes
    Responsable quarantie engineering
    Qualite projet
    Projet management office(PMO) planification generale
    Sourcing
    Acheteur projets
    Expediting
    Achat famille
    Logistique
    Travaux exterieures
    Site manager
    commissioning manager
    manufacturing
    Production
    Esais
    Planification production
    Investissement travaux neufs
    Finance
    Controle de gestion
    RH
    Formation
    Recrutement ressources
    Services
    Directeur de offres/ Ingenieurs chiffrage
    Directeur commercial/ Service commercial
    Directeur de realisation
    Chef de projet
    Planificateur
    Achat
    Chantier
    Qualite
      

  9.   

    //数据库记录
    $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);
      

  10.   

    非常感谢。 我想通过Graphviz生成垂直从上到下的树。我的思路是通过用php脚本从mysql中得到json数据或者array,并通过image_graphviz导入到graphviz的dot文件,最后生成一个动态的组织结构图。组织结构图的修改是通过表格的形式对数据库的操作进行的。 不知道各位高手有什么方法吗? 谢谢!!
      

  11.   

    搜了一下
    http://www.graphviz.org/
    东西是不错,不过在PHP里没办法用
      

  12.   

    能用,要用pear的image_graphviz类。
      

  13.   

    看看 Media Wiki 中的关于组织机构图.就是使用 GraphvizDot 处理的.php 只需要后台调用 exec 就可以处理了.
      

  14.   

    我想在JAVA中调用Graphvi。
    不知道什么实现?