ecshop 無限分類を例として使用した、PHP の再帰関数の戻り値の紹介。
ecshopの二次開発で商品カテゴリのインデックス作成を行う場合、カテゴリIDを元に最上位のカテゴリIDを取得する必要があります。最初の反応は再帰を使用することでしたので、次のように再帰関数を書きました:
コードは次のとおりです |
コードをコピー |
関数getCatTopId($cat_id)
{
($cat_id) の場合
{
$res = Array();
$sql = 'SELECT cat_id,parent_id'
。 ' から '
' WHERE cat_id = ' $cat_id .
$res = $GLOBALS['db']->getAll($sql);
if ($res[0]['parent_id'] > 0)
{
getCatTopId($res[0]['parent_id']);
}
その他
{
return $res[0]['cat_id'];
}
}
それ以外
{
return 1;
}
}
|
テストプログラム、戻り値なし?長時間チェックしても異常は見つからず、どうやら脳の回路が壊れたようだ。今日、水の神様(心優しいネチズン)に質問したところ、答えてくれました。修正は次のとおりです。
コードは次のとおりです
コードをコピー |
|
関数getCatTopId($cat_id)
{
($cat_id) の場合
{
$res = Array();
$sql = 'SELECT cat_id,parent_id'
。 ' から '
' WHERE cat_id = ' $cat_id .
$res = $GLOBALS['db']->getAll($sql);
if ($res[0]['parent_id'] > 0)
{
return getCatTopId($res[0]['parent_id']) // 関数が値を返すようにさらに return を記述します
}
その他
{
return $res[0]['cat_id'];
それ以外
{
return 1;
}
}
関数は内部で書かれており、戻っても内部関数の位置に戻るだけなので、外側に別のmain関数の層があり、それを再度返す必要があります
|
http://www.bkjia.com/PHPjc/631608.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/631608.html技術記事 ecshop の無限分類を例として、PHP の再帰関数の戻り値の問題の紹介。 ECSHOPの二次開発で商品カテゴリーのインデックス作成を行う場合、カテゴリーIDからカテゴリーを取得する必要があります...