ThinkPHP 无限极分类,在页面生成导航条数据,或者栏目列表树的情景是非常有用的,下面介绍2中方法生成:
方法1:
/**
* 递归方式获取树状列表
* @param array $data 数组中子元素必须含有id、pid字段
* @param int $pid
* @param string $dataid
* @param int $level
* @return array
*/
public static function menuTree(array $data, int $pid = 0, string $dataid = 'id', int $level = 1)
{
static $arr = [];
foreach ($data as $k => $v) {
if ($v['pid'] == $pid) {
$v['level'] = $level;
$v['dataid'] = $dataid . '-' . $v['id'];
$arr[] = $v;
self::menuTree($data, $v['id'], $v['dataid'], $level + 1);
}
}
return $arr;
}方法2:
/**
* 获取栏目树
* @param array $data 数组中子元素必须含有id、pid字段
* @return array
*/
public static function getTree(array $data)
{
$items = [];
foreach ($data as $v) {
$items[$v['id']] = $v;
}
$tree = [];
foreach ($items as $id => $item) {
if (isset($items[$item['pid']])) {
$items[$item['pid']]['list'][] = &$items[$id];
} else {
$tree[] = &$items[$id];
}
}
return $tree;
}使用方法:
先获取数据库中列表数据
$data = CategoryModel::order('id', 'asc')->select();在调用方法生成:
$category = self::getTree($data->toArray()); //$data传入时转成数组