level代表菜单级别,前端根据此控制缩进
pid 上级分类id
代码
PHP
1.父子并列缩进方式
查询数据库中所有菜单,进行排序
public function getCatalogTree()
{
$list = $this->select();
return $this->sort($list);
}
public function sort($data, $pid = 0, $level = 0)
{
static $arr = array();
foreach ($data as $k => $v) {
if ($v['pid'] == $pid) {
$v['level'] = $level;
$arr[] = $v;
$this->sort($data, $v['id'], $level + 1);
}
}
return $arr;
}
/**
* 缩进
*/
function topString(level) {
var str = '';
for (var i=0; i<level; i++)
{
str += '|----';
}
return str;
}
2.父菜单包含子菜单方式
private function getTree($data, $parent_id = 0)
{
$tree = [];
foreach ($data as $k => $v) {
if ($v['parent_id'] == $parent_id) {
$v['children'] = $this->getTree($data, $v['id']);
$tree[] = $v;
unset($data[$k]);
}
}
return $tree;
}