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 サイトの他の関連記事を参照してください。