php怎么实现公司结构图(树形结构)
程序员文章站
2022-05-09 14:26:02
...
php如何实现公司结构图(树形结构)
大家好,
我想用php实现一个树形结构图,现在不知道如何实现。
希望能听到大家的想法和思路。如果能附上示例代码或源码就更好了!!
提前感谢啦。
------解决方案--------------------
用二叉树来表示树,先生成后显示
------解决方案--------------------
这个树看是什么了
如果上级唯一,用无限级即可,即无限树,递归遍历即可
如果上级不唯一,那就复杂了
------解决方案--------------------
说白了,就是给定n个元素,元素之间存在一个关系(多个关系可以映射为一个关系),
无论它是什么结构,也不管上级唯一不唯一,只要是在纸上用笔能画出来的结构,
都可以表示为数据结构中的图,图可以用矩阵存储,矩阵是可以线性化的,
不妨找一本数据结构的书,浏览图论相关章节,特别是存储和创建以及遍历
------解决方案--------------------
表结构
id
companyName
parentid
这样的表结构就可以实现二叉树的保存。
至于遍历,我是取出一个父节点的所有子节点保存到缓存文件,省去以后的麻烦,至于保存我也啥好想法,我是保存数组中,类似这样的数组array('id'=>$id,'name'=>$companyName,'children'=>array($child1id,$child2id))以后再取的时候就可以很方便的取出一个父节点的所有子节点的,至于怎么判断一个节点是否是叶子节点,只需判断它所在数组的children元素是否为空就可以了
------解决方案--------------------
大家好,
我想用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);
------解决方案--------------------
相关文章
相关视频