php多次調用遞迴函式

來源:互聯網
上載者:User
遞迴函式如下:
/***遞迴擷取指定分類下的子類*@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));

問題已解決,非常感謝版主的熱心協助!!!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.