2014-06-29 55 views
1

我有ebay類別有parent_id s。頂級類別沒有parent_id。我試圖寫一個遞歸函數將從最低的類別數組回到我最高例如爲:遞歸函數不按預期工作php

array 
    0 => string '27"' 
    1 => string 'Monitors' 
    2 => string 'TV, Monitors and Display' 

然而到目前爲止,它導致一個無限循環。我認爲這是因爲parent_id在函數被再次調用時沒有被傳遞,它使用$ebay_store_category_id而不是parent_id

parent id :6692320015 | current category id: 6697237015 parent id :6692320015 | current category id: 6697237015 parent id :6692320015 | current category id: 6697237015 parent id :6692320015 | current category id: 6697237015 parent id :6692320015 | current category id: 6697237015

我的表:

public static function get_ebay_cats($ebay_store_category) { 
    $cat_array = array(); 
    $ebay_store_category_id = $ebay_store_category->category_id; 
    $array = self::get_cat_array($ebay_store_category_id, $cat_array); 
} 

private function get_cat_array($ebay_store_category_id, &$cat_array,) { 
    $ebay_cat_model = new Ebay_store_category_model($ebay_store_category_id); 
    $ebay_cat_model->get(); 
    $cat_array[$ebay_cat_model->category_id] = $ebay_cat_model->name; 
    $parent_id = $ebay_cat_model->parent_id; 
    echo 'parent id :'.$parent_id.' | current category id: '.$ebay_cat_model->category_id.'<br/>'; 

    if(!empty($parent_id)) { 
     return self::get_cat_array($parent_id, $cat_array); 
    } 

    return $cat_array; 
} 

回聲

我怎麼知道它的無限和父ID沒有被傳遞時,函數引用自身的結果結構:

+------------+------------+-------------------------------+-------+-------------+ 
| id   | parent_id | name       | order | category_id | 
+------------+------------+-------------------------------+-------+-------------+ 
| 7   | NULL  | TV, Monitors and Displays  |  0 | 7   | 
| 6701115015 | 7   | Monitors      |  4 | 6701115015 | 
| 5661200015 | 6701115015 | 27"       |  3 | 6701114015 | 
+0

順便說一句:你正將'$ count'傳遞給'get_cat_array',這是永遠不會讀取的。 – buff

+0

謝謝,拿出來。在我的代碼中使用它,以爲我爲了可讀性而將它們全部取出。 – Nicola

+0

如果存在無限循環,則在所有情況下條件可能都是正確的。我會打印出$ parent_id進行調試,看看它爲什麼不是空的。 – buff

回答

0

這是一個CI的東西。我用$ebay_cat_model->get_where(array('id'=>$ebay_store_category_id));而不是$ebay_cat_model = new Ebay_store_category_model($ebay_store_category_id);,它現在可以工作。