2011-12-23 19 views
0

PHP.netで見つかった関数を使用して、ディレクトリとその内容を再帰的に調べます。これらの配列の要素がファイル名に対応する各サブディレクトリに対して、ネストされた配列を作成します。再帰関数間の状態のトラッキング

ファイルパスを追跡しません。それが私が望むものです。ここでは、コードです:

function get_directory_tree($outerDir, $filters = array()){ 
    $dirs = array_diff( 
      scandir($outerDir), 
      array_merge(Array(".", ".."), $filters) 
     ); 

    $dir_array = Array(); 

    foreach($dirs as $d){ 
    if(is_dir($outerDir."/".$d)){ 
     $dir_array[ $d ] = get_directory_tree($outerDir."/".$d, $filters); 
    } else { 
     $dir_array[ $d ] = $d; 
    } 
    } 
    return $dir_array; 
    } 

そして、それは私のテストケースのためにこれを出力:

Array(
    [a] => Array(
     [aa] => Array(
       [hjkl.txt] => hjkl.txt 
      ) 
     [asdf.txt] => asdf.txt 
    ) 
    [b] => Array() 
    [c] => Array() 
) 

そして、これは私が出力することを希望するものである:

Array(
    [a] => Array(
     [aa] => Array(
       [hjkl.txt] => 'a/aa/hjkl.txt' 
      ) 
     [asdf.txt] => 'a/asdf.txt' 
    ) 
    [b] => Array() 
    [c] => Array() 
) 

答えて

1

変更...

$dir_array[ $d ] = $d; 

~ ...

$dir_array[ $d ] = $outerDir."/".$d; 
+0

乾杯!再帰は私の脳をあいまいにする。 –