一个分类数组,树形返回,下级分类数据存放在subcat里面,一共有三级分类,现在需要输入一个分类id,直接返回分类的名称,如:一级分类》二级分类》三级分类。
核心函数:
/** * 构建分类树 * * @param array $categories 分类数据数组 * @param int $parentId 父分类ID * @param int $level 分类层级 * @return array 分类树 */ function buildCategoryTree($categories, $parentId = 0, $level = 0) { $tree = array(); // 分类树 foreach ($categories as $category) { if ($category['parent_id'] == $parentId) { $category['level'] = $level; // 设置分类层级 $category['children'] = buildCategoryTree($categories, $category['id'], $level + 1); // 递归构建子分类树 $tree[] = $category; // 添加到分类树中 } } return $tree; } /** * 获取分类路径 * * @param array $tree 分类树 * @return array 分类路径数组 */ function getCategoryPaths($tree) { $paths = []; // 分类路径数组 foreach ($tree as $category) { $path = $category['name']; // 当前分类名称 if (!empty($category['children'])) { $childPaths = getCategoryPaths($category['children']); // 递归获取子分类路径 foreach ($childPaths as $childPath) { $paths[] = [ 'spec_id' => $childPath['spec_id'], // 使用子分类的spec_id 'name' => $path . '》' . $childPath['name'] // 构建完整路径 ]; } } else { $paths[] = [ 'spec_id' => $category['id'], // 叶子节点的id作为spec_id 'name' => $path // 叶子节点名称作为路径 ]; } } return $paths; }
调用实例():
// 假设这是从数据库查询到的分类数据 $categories = [ ['id' => 1, 'name' => '一级分类', 'parent_id' => null], ['id' => 2, 'name' => '二级分类', 'parent_id' => 1], ['id' => 3, 'name' => '三级分类', 'parent_id' => 2], ]; $categoryTree = buildCategoryTree($categories); // 构建分类树 $categoryPaths = getCategoryPaths($categoryTree); // 获取分类路径
效果:
实战