2010-08-14 91 views
5

經過兩個小時的頭部劃傷和谷歌搜索 - 我卡住了!PHP - 從遞歸函數返回數組時出錯

按照標題我試圖返回一個數組,隨着函數循環遍歷而建立起來。我只想返回else上的數組變量,但它不會合作。它只是簡單地從函數返回空白,但是在其他函數中,我可以打印它並按預期顯示。它只是不會返回$ open_array變量中的數組。任何想法(或濫用)將非常感激!

function find_parent($number, $open = false) { 
    if(isset($other_variable[$number])) { 
     foreach($other_variable[$number] as $val) { 
      $open[$val->id] = [$val->id; 
      $open = find_parent([$val->id, $open); 

     } 
    } 
    else { 
    return $open; 
    } 
} 

$open_array = find_parent($number); 
print_r($open_array); 
+0

我不明白'$ other_variable'在函數的範圍界定。 – NullUserException 2010-08-14 12:20:46

+0

還有'[$ val-> id'沒有有效的語法。這是否甚至運行? – NullUserException 2010-08-14 12:22:13

+0

什麼?你不使用遞歸來構建數組?你來自哪個星球,莫羅尼亞? – 2010-08-14 12:29:49

回答

3

在「then」部分中,您分配給$ open,但不會返回該值。所以你不能真正期望得到回報,除非你進入else部分,但是這是一個不變的版本。

所以,這就是我會做的:我會去與一個版本沒有返回$打開有史以來。 在調用函數之前初始化$ open。 傳遞它。 然後在必要時修改它。

沒有理由真的要返回這個$ open值,因爲無論如何你都是通過引用傳遞它的,也就是說它應該總是與你操作的同一個對象(並且在那些情況下它不是,它是可能是一個錯誤)。

通過這種方式,您可以專注於調用和返回的流程邏輯,並確保您始終與相同的數據結構交談。

更新

function find_parent($number, $open = false) { 
    if(isset($other_variable[$number])) { 
     foreach($other_variable[$number] as $val) { 
      $open[$val->id] = [$val->id; 
      $open = find_parent([$val->id, $open); 
      return $open; // INSERTED 
     } 
    } 
    else { 
    return $open; 
    } 
} 
+0

我明白你的評論謝謝你:)。但它仍然沒有任何意義,我可以print_r($打開)裏面else打印數組,因爲我期望它但我不能返回它? – Hayden 2010-08-14 12:59:50

+0

嘗試在「then」部分中返回它(請參閱更新)。否則該值在「then」部分中設置,正確地傳遞給遞歸調用,所以它也出現在「else」部分中,但是一旦前一個調用的「if」部分返回,它就不會返回。 – Nicolas78 2010-08-14 13:26:13

+0

賓果,工作的一種享受。謝謝! – Hayden 2010-08-14 13:34:53