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]}
; 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