首頁  >  文章  >  後端開發  >  ecshop無限分類遞歸函數傳回值詳解

ecshop無限分類遞歸函數傳回值詳解

伊谢尔伦
伊谢尔伦原創
2017-06-27 09:28:351597瀏覽

在 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無限分類遞歸函數傳回值詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn