2011-07-22 44 views
0

我想通過填充引用數組來生成一個使用遞歸邏輯的集合,但我並沒有那麼穩定的引用語法。下面的例子是否有意義? (我瞭解如何正確使用這個操作符?)如果沒有,如何做到這一點?遞歸函數引用集合

// I want all uniquely named subfolders returned as array 
$allFolders = recursive('/'); 

function recursive($folder,$collection=array()) 
{ 
    /* Look up direct children here */ 

    foreach ($subFolders as $folder) { 
     if (!isset($collection[$folder])) { 
      $collection[$folder] = $folder; 
      recursive($folder,&$collection); 
     } 
    } 
    return $collection; 
} 

回答

0

您需要在函數定義申報「引用」 - 和默認值是沒有用處的,因爲你將無法在功能完成後對其進行訪問。你應該有這樣的:

$folder = '/'; 
$collection = array(); 
recursive($folder, $collection); 
print_r($collection); 

function recursive($folder, &$collection) 
{ 
    ... 
} 

雖然PHP5將接受默認值的引用的參數,這讓很少的感覺。

你也應該不是「參照」在通話的使用方法:

recursive($folder, $collection); 

雖然第二(在呼叫參考)被允許在之前版本的PHP,它已經過時了。

+0

另外要小心,PHP並不真正喜歡遞歸。您可能想嘗試一種迭代方法。 –

+0

什麼是最有效的方式來做我想要完成的事情? –