<?php
/**
* 组织架构图
*/
class Orgmap{
private $array,$str;
public function __construct($array){
$this->array=$array;
}
public function show($array){
if (is_array($array)){
$this->array=$array;
}elseif (!is_array($this->array)) {
echo '必需输入数组才能显示组织架构图.';
}
//$str=$this->digui($this->array);
foreach($this->array as $key=>$val){
$str=$this->digui($key,$val);
}
$str="<div id='emtorg'><div style='display:none;'><a href='http://www.emtit.net'>依面天OA系统组织架构图</a></div>{$str}</div>";
return $str;
}
/**
* 递归算法
*
* @param unknown_type $root
* @param unknown_type $array
* @return unknown
*/
private function digui($root,$array){
if(!is_array($array)){
$str=<<<EOF
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td rowspan="2"><div class="node">$root</div></td>
<td rowspan="2"><div class="line"></div></td>
<td class="left"> </td>
<td rowspan="2"><div class="node">$array</div></td>
</tr>
<tr>
<td class="right"> </td>
</tr>
</table>
EOF;
return $str;
}
//==========================================================
//只要$array是数组 ,说明他有子节点,所以先做了以一个根先
$count=count($array);
$rowspan=$count*2;
$str=<<<EOF
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td rowspan="{$rowspan}"><div class="node">{$root}</div></td>
<td rowspan="{$rowspan}"><div class="line"></div></td>
EOF;
//然后再去判断他的子节点有没有下级
$i=1;
foreach($array as $key=>$val){
if (!is_int($key)){//每一个节点都要先判断他们有没有子节点。如果他有子节点,他一定是数组,因为传进来的数组是array('子节点A','子节点B'=>array('下级节点'));
$next_node=$this->digui($key,$val);
}else {
$next_node='<div class="node">'.$val.'</div>';
}
if ($i==1){//当是第一个节点时,要和根节点在同一行
if ($count==1){//当传进来的是只有一个数组的时候,样式要改变
$str.=<<<EOF
<td class="left"> </td>
<td rowspan="2">{$next_node}</td>
</tr>
<tr>
<td class="right"> </td>
</tr>
EOF;
}else {
$str.=<<<EOF
<td> </td>
<td rowspan="2">{$next_node}</td>
</tr>
<tr>
<td class="top right"> </td>
</tr>
EOF;
}
}elseif ($i==$count) {//最后一个节点时,他的连接线会不同,显响了他的CLASS,所以要另外做判断
$str.=<<<EOF
<tr>
<td class="top left"> </td>
<td rowspan="2">{$next_node}</td>
</tr>
<tr>
<td> </td>
</tr>
EOF;
}else {//中间的节点的时候
$str.=<<<EOF
<tr>
<td class="top"> </td>
<td rowspan="2">{$next_node}</td>
</tr>
<tr>
<td class="top right"> </td>
</tr>
EOF;
}
$i++;
}
$str.="</table>";
return $str;
}
}
?>
- 1
- 2
前往页