生成树形菜单

<?php

function tree_menu($list, $pid=0, $pre='', $pk='id', $pidk='pid', $title='name') {
	if(empty($list)){
		return [];
	}

	$prefixs = array('│','├','└',' ');
	$tree = [];
	$children = [];

	foreach ($list as $key => $value) {
		if ($value[$pidk] == $pid) {
			$children[] = $value;
			unset($list[$key]);
		}
	}

	$last = end($children);
	foreach($children as $node){
		$end = $last[$pk]==$node[$pk] ? true : false;
		$subPrefix = $pre . $prefixs[3];

		$node[$title] = $subPrefix . ($end ? $prefixs[2] : $prefixs[1]) . $node[$title];
		$tree[] = $node;
		$tree = array_merge($tree, tree_menu($list, $node[$pk], ($subPrefix . ($end ? $prefixs[3] : $prefixs[0])), $pk, $pidk, $title));
	}

	return $tree;
}

$a=[
    ['id'=>1,'pid'=>0,'name'=>'name1'],
    ['id'=>2,'pid'=>1,'name'=>'name2'],
    ['id'=>3,'pid'=>1,'name'=>'name3'],
    ['id'=>4,'pid'=>2,'name'=>'name4'],
    ['id'=>41,'pid'=>2,'name'=>'name41'],
    ['id'=>5,'pid'=>1,'name'=>'name5'],
    ['id'=>6,'pid'=>0,'name'=>'name6'],
    ['id'=>11,'pid'=>0,'name'=>'name11'],
    ['id'=>7,'pid'=>0,'name'=>'name7'],
    ['id'=>8,'pid'=>6,'name'=>'name8'],
    ['id'=>9,'pid'=>6,'name'=>'name9'],
    ['id'=>10,'pid'=>7,'name'=>'name10'],
];

$b = tree_menu($a);
foreach($b as $v){
    echo $v['name']."\n";
}
 ├name1
 │ ├name2
 │ │ ├name4
 │ │ └name41
 │ ├name3
 │ └name5
 ├name6
 │ ├name8
 │ └name9
 ├name11
 └name7
   └name10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值