2017-09-06 66 views
2

我希望有人能夠幫助,這讓我瘋狂!PHP - 遞歸函數找到父母的任何給定的父母 - 問題

我有一個簡單的遞歸PHP函數,讓所有的父母都可以在給定的父類中獲得一個類別列表。您只需將它傳遞給任何給定類別的父類別ID,它將遞歸地將所有父類進一步放到樹上。

function getParentCategoriesById($parent_category_id,array $parents = []){ 

if(empty($parent_category_id)) { 
    return []; 
} 

$parents[] = $parent_category_id; 

$parent_category = DB::builder()->table('product_categories')->find($parent_category_id); 

if(!empty($parent_category->parent)) { 
    getParentCategoriesById($parent_category->parent,$parents); 
} 

return $parents;} 

假設類別ID = 100有2個父母(33-> 37),如果我只是在返回之前轉儲$ parents數組,結果是:

Array 
(
    [0] => 33 
    [1] => 37 
) 
Array 
(
    [0] => 33 
) 

的返回的第一個數組是正確的結果,但我不明白該函數如何重新運行,然後只返回第一個父級。

+1

你沒有做你的第二個'getParentCategoriesById'調用的結果什麼。並且數組本身沒有被修改,您必須通過它才能發生。 – CBroe

+0

謝謝!那就是訣竅。 –

回答

3

你應該在內部調用傳遞參考$parentsgetParentCategoriesById()

function getParentCategoriesById($parent_category_id, array &$parents = []) { ... } 
+0

謝謝,雖然由於我的PHP版本,我不得不支付函數定義中的參考: 私有函數getParentCategoriesById($ parent_category_id,array&$ parents = []) –

+0

也無需返回此數組。 –