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传入时转成数组