一个分类数组,树形返回,下级分类数据存放在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); // 获取分类路径
效果:
实战
