欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

ecshop无限分类递归函数返回值详解

程序员文章站 2022-04-11 11:44:00
...
在 ecshop 二次开发中做产品分类索引时,要根据分类 id 取得所属*分类 id 。第一个反应就是用递归递出来,于是写了递归函数如下:
function getCatTopId($cat_id)
{
    if ($cat_id)
    {
      $res = Array();
        $sql = 'SELECT cat_id, parent_id'
             . ' FROM ' . $GLOBALS['ecs']->table('category') 
             . ' WHERE cat_id = ' . $cat_id . ' AND is_show = 1';
        $res = $GLOBALS['db']->getAll($sql);
        if ($res[0]['parent_id'] > 0)
        {
            getCatTopId($res[0]['parent_id']);
        }
        else
        {
            return $res[0]['cat_id'];
        }
    }
    else
    {
        return 1;
    }
}

一测试程序,没有得到返回值?检查了很久都没有发现错误,看来脑壳断路了。今天问水神(一好心网友)时,他帮我解答出来了,修改如下:

function getCatTopId($cat_id)
{
    if ($cat_id)
    {
     $res = Array();
        $sql = 'SELECT cat_id, parent_id'
             . ' FROM ' . $GLOBALS['ecs']->table('category') 
             . ' WHERE cat_id = ' . $cat_id . ' AND is_show = 1';
        $res = $GLOBALS['db']->getAll($sql);
        if ($res[0]['parent_id'] > 0)
        {
            return getCatTopId($res[0]['parent_id']); // 修改处,多写个 return ,让函数返回值
        }
        else
        {
            return $res[0]['cat_id'];
        }    }
    else
    {
        return 1;
    }
}

函数写在内部,就算返回了,也只是返回到内部的那个函数的位置,所以外面还有一层主函数,必须再 return 一下

以上就是ecshop无限分类递归函数返回值详解的详细内容,更多请关注其它相关文章!