2011-12-23 139 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

乾杯!遞歸使我的大腦模糊不清。 – 2011-12-23 18:55:13