遞迴函式如下:
/***遞迴擷取指定分類下的子類*@params $categories array 全部分類的數組*@params $parent_id int 父類id 預設為頂級分類*@return $arr array 擷取到的子類數組**/function get_child_category($categories,$parent_id=0){static $arr=array();foreach ($categories as $category){if ($category['parent_id']==$parent_id){$arr[]=$category;get_child_category($categories,$category['cat_id']);}}return $arr;}
問題描述:我想通過該函數擷取指定父類下的子類,第一次調用沒有問題,從第二次開始,每次調用該函數,上一次取得的結果都儲存在了本次擷取的數組中,比如有頂級分類A,B,C ;A類下有a1,a2,a3三個子類,B下有b1,b2,b3三個子類。第一次調用該函數擷取到了A下的全部子類,第二次調用函數,想取到B下的子類b1,b2,b3,擷取到的卻是a1,a2,a3,b1,b2,b3,我想應該是靜態變數的問題,但是如果不使用靜態變數無法在遞迴中儲存值,使用靜態變數後,又出現了上述情況,我想調用一次遞迴函式以後,就清空上一次取得的資料,不知怎麼解決,請大神賜教,不勝感激!
回複討論(解決方案)
作為參數傳遞
function get_child_category($categories,$parent_id=0, $arr=array()){ foreach ($categories as $category){ if ($category['parent_id']==$parent_id){ $arr[]=$category; $arr = get_child_category($categories,$category['cat_id'], $arr); } } return $arr;}為減少記憶體開銷,可以傳遞引用
function get_child_category(&$categories, $parent_id=0, &$arr=array()){ foreach ($categories as $category){ if ($category['parent_id']==$parent_id){ $arr[]=$category; get_child_category($categories, $category['cat_id'], $arr); } } return $arr;}調用
print_r(get_child_category($ar, 0));print_r(get_child_category($ar, 2));
問題已解決,非常感謝版主的熱心協助!!!