ホームページ  >  記事  >  バックエンド開発  >  ecshopの無限分類再帰関数の戻り値の詳細説明

ecshopの無限分類再帰関数の戻り値の詳細説明

伊谢尔伦
伊谢尔伦オリジナル
2017-06-27 09:28:351598ブラウズ

ecshopの二次開発で商品分類indexを行う際には、カテゴリ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;
    }
}

テストプログラムですが、戻り値が取得されませんか?長時間チェックしても異常は見つからず、どうやら脳の回路が壊れたようだ。今日、Shuishenさん(心優しいネチズン)に質問したら、答えてくれました。修正は次のとおりです。

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;
    }
}

関数は内部で書かれており、戻っても内部関数の位置に戻るだけです。したがって、外側に main 関数の別の層があり、再度返さなければなりません

以上がecshopの無限分類再帰関数の戻り値の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。