php+树状结构图,PHP生成结构图形状的分类要怎么写

class Tree{

static public function SortTree($data, $pid = 0, $level=0, $icon = array(' ├─', ' └─',' │'))

{

$str="";$arr=[];

if(empty($data)) return array();

foreach ($data as $k=>$v) {

if ($v['pid'] == $pid) {

$v['level']= $level+1;

if($v['level']>2){

$str=str_repeat($icon[2], $v['level']-2);

}

if($v['pid']== 0){

$v['html']='';

}else{

$v['html']= $str . $icon[0];

}

$arr[] =$v;

$arr = array_merge($arr, self::SortTree($data, $v['cid'], $level + 1));

}

}

return $arr;

}

static public function getTree($data,$icon = array(' ├─', ' └─',' │')){

if(!is_array($data) || empty($data)) return array();

$arr = self::SortTree($data, $pid = 0, $level=0, $icon = array(' ├─', ' └─',' │'));

foreach ($arr as $k => $v) {

$str = "";

if ($v['level'] > 2) {

for ($i = 1; $i < $v['level'] - 1; $i++) {

$str .= " │";

}

}

if($v['level']!=1){

if (isset($arr[$k + 1]) && $arr[$k + 1]['level'] >= $arr[$k]['level']) {

$arr[$k]['html'] =$str . $icon[0];

} else {

$arr[$k]['html'] = $str . $icon[1];

}

}else{

$arr[$k]['html'] = $v['html'];

}

}

return $arr;

}

}

$data=array(

['cid' => 1, 'pid' => 0,'name'=>'a1'],

['cid' => 2, 'pid' => 1,'name'=>'a2'],

['cid' => 3, 'pid' => 2,'name'=>'a3'],

['cid' => 4, 'pid' => 2,'name'=>'a4'],

['cid' => 5, 'pid' => 0,'name'=>'a5'],

['cid' => 6, 'pid' => 5,'name'=>'a6'],

['cid' => 7, 'pid' => 6,'name'=>'a7'],

['cid' => 8, 'pid' => 7,'name'=>'a8'],

['cid' => 9, 'pid' => 7,'name'=>'a9'],

['cid' => 10, 'pid' => 8,'name'=>'a10'],

['cid' => 11, 'pid' => 10,'name'=>'11'],

['cid' => 12, 'pid' => 11,'name'=>'12'],

['cid' => 13, 'pid' => 12,'name'=>'13'],

['cid' => 14, 'pid' => 13,'name'=>'14'],

['cid' => 15, 'pid' => 14,'name'=>'15'],

['cid' => 16, 'pid' => 15,'name'=>'16'],

);

$tree=new Tree();

$a=$tree->getTree($data);

foreach ($a as $k=>$v){

echo $v['html'].$v['name'].' ---level:'.$v['level'].'
';

}

最后最近勉强解决了,如果哪里有问题,欢迎大神帮我指导修正。

最终结果:

a1 ---level:1

├─a2 ---level:2

│ ├─a3 ---level:3

│ └─a4 ---level:3

a5 ---level:1

├─a6 ---level:2

│ ├─a7 ---level:3

│ │ ├─a8 ---level:4

│ │ │ ├─a10 ---level:5

│ │ │ │ ├─11 ---level:6

│ │ │ │ │ ├─12 ---level:7

│ │ │ │ │ │ ├─13 ---level:8

│ │ │ │ │ │ │ ├─14 ---level:9

│ │ │ │ │ │ │ │ ├─15 ---level:10

│ │ │ │ │ │ │ │ │ └─16 ---level:11

│ │ └─a9 ---level:4

祝大家 五福临门,新年快乐!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值