php的递归方式处理多级所属分类的多级分类显示,如:一级分类》二级分类》三级分类


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

效果:image.png


实战


评论/留言