菜单实现无限极分类树
public function index()
{
$data=Category::select()->order('sort','desc')->toArray();
$items = [];
foreach ($data as $v){
$items[$v['id']] = $v;
}
$tree = array(); //格式化好的树
foreach ($items as $item)
if (isset($items[$item['pid']]))
$items[$item['pid']]['son'][] = &$items[$item['id']];
else
$tree[] = &$items[$item['id']];
return $this->success($tree);
}
/**
* tree 子菜单
* @param array $data 数据
* @param string $childrenname 子数据名
* @param string $keyName 数据key名
* @param string $pidName 数据上级key名
* @return array
*/
function get_tree_children($data,$childrenname = 'children',$keyName = 'id',$pidName = 'pid')
{
$list = array();
foreach ($data as $value) {
$list[$value[$keyName]] = $value;
}
static $tree = array(); //格式化好的树
foreach ($list as $item) {
if (isset($list[$item[$pidName]])) {
$list[$item[$pidName]][$childrenname][] = &$list[$item[$keyName]];
} else {
$tree[] = &$list[$item[$keyName]];
}
}
return $tree;
}