<?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