2017-09-06 21 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)を持っている私はちょうど戻る前に$両親配列をダンプた場合、結果があるとしましょう:

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

返された最初の配列は正しい結果ですが、関数がどのように再実行されているのかわかりません。最初の親だけが返されます。

+1

に内部呼び出しで$parentsへの参照を渡す必要があります。配列自体は変更されていないので、それが起こるには参照ごとに渡す必要があります。 – CBroe

+0

ありがとう!それがトリックでした。 –

答えて

3

あなたはあなたの第二 `getParentCategoriesById`呼び出しの結果で何もしていませんgetParentCategoriesById()

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

ありがとう、私のPHPのバージョンのために、私は関数の定義で参照を支払わなければならなかった: プライベート関数getParentCategoriesById($ parent_category_id、array&$ parents = []) –

+0

また、この配列を返す必要はありません。 –

関連する問題