在 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中文網其他相關文章!