2015-11-15 21 views
2

我在我的遞歸函數中使用了一個foreach循環。但是我很難搞清楚我的返回聲明在哪裏傳遞。我需要在某個時候回到我的臨時數組,但我不知道如何做到這一點:使用遞歸函數時傳遞臨時數組的位置?

<?php 
    $patterns = function($array, $temp = array(), $i = 0, $id = 0, $parent = 0) use(&$patterns) { 
     $return = null; 

     if(array_key_exists($i, $array)) { 
      foreach($array[$i] as $set) { 
       if($parent == $set['id']) { 
        $data = array(
         'id' => $set['id'], 
         'parent' => $set['parent'] 
        ); 

        array_push($temp, $data); 
       } 

       $patterns($array, $temp, $i + 1, $set['id'], $set['parent']); 
      } 
     } 
    }; 

    print_r($patterns($rev_relations)); 
?> 

這是我的數據:

Array(
    [0] => Array(
      [0] => Array(
        [id] => 60 
        [parent] => 55 
       ) 
      [1] => Array(
        [id] => 57 
        [parent] => 54 
       ) 
     ) 
    [1] => Array(
      [0] => Array(
        [id] => 61 
        [parent] => 50 
       ) 
      [1] => Array(
        [id] => 54 
        [parent] => 49 
       ) 
     ) 
    [2] => Array(
      [0] => Array(
        [id] => 49 
        [parent] => 0 
       ) 
     ) 
) 
+0

可以用來初始化一個例子輸入或相似的,所以我們可以實際運行的代碼? –

+0

在遞歸函數中,所有輸入必須來自參數,所有輸出必須以返回值形式出現。不應考慮其他選項。 – zerkms

+0

zerkms,你是對的。我想我已經封裝了我需要的所有東西。 – HelpNeeder

回答

1
<?php 


//pass $temp by reference so outside variable gets populated 
    $patterns = function($array, &$temp, $i = 0, $id = 0, $parent = 0) use(&$patterns) { 
     $return = null; 

     if(array_key_exists($i, $array)) { 
      foreach($array[$i] as $set) { 
       if($parent == $set['id']) { 
        $data = array(
         'id' => $set['id'], 
         'parent' => $set['parent'] 
        ); 

        array_push($temp, $data); 
       } 

       $patterns($array, $temp, $i + 1, $set['id'], $set['parent']); 
      } 
     } 
    }; 

    //actuall array is created on temp here 
    $temp=array(); 
    $patterns($rev_relations,$temp); 
?> 

不會這項工作?從來沒有真正與無名功能的工作,但是這是我怎麼會去了解它在normall遞歸函數

好了,取兩個

<?php 

    $patterns = function($array, $temp = array(), $i = 0, $id = 0, $parent = 0) use(&$patterns) { 
     $return = null; 

     if(array_key_exists($i, $array)) { 
      foreach($array[$i] as $set) { 


      if($parent == $set['id']) { 
       $data = array(
        'id' => $set['id'], 
        'parent' => $set['parent'] 
       ); 

       array_push($temp, $data); 
      } 

      return $patterns($array, $temp, $i + 1, $set['id'], $set['parent']); 
     } 
    } 
    else 
    { 
     return $temp; 
    } 
}; 


$patterns($rev_relations); 
?> 
+1

它不會返回一些東西,但填充溫度。否則你需要一個如果知道它在哪裏結束 – Elentriel

+0

爲了以後的目的,我需要保持循環內的數據。 – HelpNeeder

+0

感謝您的幫助。 – HelpNeeder