2011-07-22 33 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は参照引数によってデフォルト値を受け入れますが、それはほとんど意味がありません。

ます。また、通話中「参照によって」を使うべきではない:(コールで参照することにより)第二は、PHPの以前のバージョンで許可されたが

recursive($folder, $collection); 

、それが廃止されています。

+0

PHPが再帰性を本当に好まないことにも注意してください。代わりに反復的なアプローチを試してみてください。 –

+0

私が達成しようとしていることを行う最も効率的な方法は何でしょうか? –