2013-06-24 50 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)因为这个数字只会返回第一级目录。