2013-06-24 61 views
1

這是我的CodeIgniter代碼,用於在我自己的服務器中查找文件夾的目錄結構,但它僅深入一層。我想列出給定的$path中的所有子目錄。這段代碼中的錯誤是什麼?在CodeIgniter中查找目錄結構

function finddir($path) 
{ 
    $this->load->helper('directory'); 
    $dir=directory_map($path,1); 
    //echo"$path"; 
    foreach ($dir as $key => $subdir) 
    { 
     //echo $subdir."<br/>"; 
     if(is_dir($subdir)) 
     { 
      echo "<h3>$subdir</h3>"; 
      $this->finddir($subdir); 
     } 
     else 
     { 
      echo "$subdir<br>"; 
     } 

    } 
} 

輸出只有一個深度。由於我使用遞歸,我希望它進入更深層次。

回答

0

它更有意義,使兩種功能,這樣你不會再生一個遞歸函數中的陣列。這樣它就會生成一次,並且您正在遞歸地從這個數組中獲取值。除非目錄類被破壞,否則你不需要檢查它是否是一個目錄。如果它是一個數組,它是一個目錄:

function finddir($path){ 
    $this->load->helper('directory'); 
    $dir=directory_map($path); 
    $this->recursive($dir); 
} 

function recursive($arr) { 
    foreach ($arr as $key => $val) { 
     if (is_array($val)){ 
      echo "<h3>$key</h3>"; 
      echo "<ul>\n"; 
      $this->recursive($val); 
      echo "</ul>\n"; 
     } else { 
      echo "<li>".$val."</li>\n"; 
     } 
    } 
} 

你休息標籤<br/>不顯示的結構很好,所以我改成了使用嵌套列表。

我剛剛注意到你正在爲directory_map()函數賦值1。它限制到只有一個級別,所以你可能要離開了這一點,如果你想要去與遞歸一路:

$dir=directory_map($path); 
+0

thanxx .....這是一個更好的選擇,但它失去了優化代碼,它解決了我的問題.... THnxxx再次 –

0

你爲什麼這樣做?

返回一個包含子數組(如果適用的話還有基於路徑的子子數組)的數組。

您將獲得完整的樹 - 只需循環訪問數組並根據需要打印/使用,使用is_array($subdir)來測試它的目錄或文件葉。

0

嘗試RecursiveDirectoryIterator

function finddir($path) 
{ 
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); 
    foreach($objects as $name => $object){ 
     echo "$name\n"; 
    } 
} 
+0

它wass superbbbb ...... –

0

,而不是$dir=directory_map($path,1)刪除電話號碼1,使其顯示這樣$dir=directory_map($path)因爲這個數字只會返回第一級目錄。