【问题标题】:Skip all folders when using scandir使用 scandir 时跳过所有文件夹
【发布时间】:2014-09-15 09:26:32
【问题描述】:

我正在收集给定文件夹中的文件列表,其中可能有文件和文件夹。

我可以在需要时手动跳过文件夹,但是如何自动跳过所有文件夹并仅将文件存储在数组中?

$moduleArray = array_diff(scandir('module/', 1), array('..', '.', 'admin'));

嗯,我知道了...但是在使用 scandir 搜索时有什么方法吗?

    foreach($moduleArray as $module) {
        $end = explode(".", $module);
        if(end($end) == "php") {
            $name = substr($module, 0, -8);
            echo " <a href=\"index.php?page=$name\"> $name </a><br />";
        }
    }

【问题讨论】:

  • 使用is_dir()函数判断文件是否为文件夹。

标签: php arrays scandir


【解决方案1】:

您可以搜索数组并删除文件夹; 这是我所知道的最好的方式。:-)

 for($i=0;$i<count($moduleArray);$i++)
 {
   if(is_dir($moduleArray[$i])
   {
     //Skip It
   }
 }

【讨论】:

    【解决方案2】:
    $moduleArray = array_diff(scandir('module/', 1), array('..', '.'));
    $fileListArray = array();
    foreach ($moduleArray as $module){
       if (!is_dir($module)){
          $fileListArray[] = $module;  
       }
    }
    

    【讨论】:

      【解决方案3】:

      或者,您也可以使用 SPL DirectoryIterator-&gt;isDir()

      $moduleArray = array();
      foreach (new DirectoryIterator('module/') as $file) {
          if($file->isDir()) continue;
          $moduleArray[] = $file->getPathname(); // or getFilename()
      }
      

      【讨论】:

      • +1 等待有人提出这个解决方案 :) (也许注意这个类所需的 php 版本
      • 你好 @Darren 是的,我也用这个,它没有具体说明这个库与哪个 PHP 版本捆绑在一起(5.3 及以上?)manual 它只在这里说5跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多