php实现无限级分类查询要求(递归、非递归)

php可以通过递归和非递归两种方式实现无限级分类的查询。

php实现无限级分类查询(递归、非递归)

# 递归方式

function get_cate_name($cate_id, $cate_list) {
    if (empty($cate_list[$cate_id])) {
        return '';
    }
    $cate = $cate_list[$cate_id];
    $name = $cate['name'];
    if ($cate['parent_id'] > 0) {
        $name = get_cate_name($cate['parent_id'], $cate_list) . ' -> ' . $name;
    }
    return $name; 
}

// 分类列表
$cate_list = [
    1 => ['name' => '家用电器', 'parent_id' => 0],  
    2 => ['name' => '冰箱', 'parent_id' => 1],
    3 => ['name' => '电视', 'parent_id' => 1],
    4 => ['name' => '柜式冰箱', 'parent_id' => 2],
    5 => ['name' => '洗衣机', 'parent_id' => 3]   
];

echo get_cate_name(5, $cate_list);
// 家用电器 -> 电视 -> 洗衣机

# 非递归方式

 
function get_cate_name($cate_id, $cate_list) {
    $name = '';
    while ($cate_id > 0) {
        if (empty($cate_list[$cate_id])) {
            break;
        }
        $cate = $cate_list[$cate_id];
        $name = $cate['name'] . ' -> ' . $name;
        $cate_id = $cate['parent_id'];
    }
    return trim($name, ' -> ');
}

// 分类列表(同上)
echo get_cate_name(5, $cate_list);
// 家用电器 -> 电视 -> 洗衣机

递归方式需要在每个层级递归调用自己,而非递归方式通过循环不断查找父级分类,直到根分类。

两种方式的时间复杂度都是O(n),但递归方式会有函数调用的额外开销,空间复杂度也较高。

所以当分类层级较深时,非递归方式性能会更优。根据分类数据量和层级复杂度,选择合适的方式进行实现。对性能要求较高的情况,非递归方式会更为实用。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论