【问题标题】:Is there an easy way to read filenames in a directory and add to an array?有没有一种简单的方法可以读取目录中的文件名并添加到数组中?
【发布时间】:2011-03-31 09:03:56
【问题描述】:

我有一个目录:Audio/,其中只有 mp3 文件。我想自动化创建指向这些文件的链接的过程。有没有办法读取目录并将该目录中的文件名添加到数组中?

如果我们可以做一个关联数组,并且键是文件名减去 .mp3 标记,那就太酷了。

有什么想法吗?

详细说明:我实际上有几个 Audio/ 文件夹,每个文件夹都包含不同事件的 mp3。正在从数据库中提取事件详细信息并填充表。这就是我复制代码的原因,因为现在在每个 Audio/ 文件夹中,我必须为下载链接定义文件名并为 mp3 播放器定义文件名。

谢谢!这将大大简化我的代码,因为现在我正在一遍又一遍地重复大量代码!

【问题讨论】:

    标签: php arrays directory


    【解决方案1】:

    SPL方式是DirectoryIterator:

    $files = array();
    foreach (new DirectoryIterator('/path/to/files/') as $fileInfo) {
        if($fileInfo->isDot() || !$fileInfo->isFile()) continue;
        $files[] = $fileInfo->getFilename();
    }
    

    【讨论】:

    • 我更喜欢这种方式!你错过了 files[] 上的 $
    【解决方案2】:

    为了完整起见:您也可以使用glob:

    $files = array_filter(glob('/path/to/files/*'), 'is_file'); 
    

    这将返回所有文件(但不包括文件夹),您可以根据需要进行调整。

    要获取文件名(而不是完整路径的文件),只需添加:

    $files = array_map('basename', $files);
    

    【讨论】:

      【解决方案3】:

      是的:使用scandir()。如果您只想要不带扩展名的文件名,请在您从scandir() 收到的数组中的每个元素上使用basename()。

      【讨论】:

        【解决方案4】:

        这应该可以做你想要的:

        // Read files
        $files = scandir($dirName);
        // Filter out non-files ('.' or '..')
        $files = array_filter($files, 'is_file');
        // Create associative array ('filename' => 'filename.mp3')
        $files = array_combine(array_map('basename', $files), $files);
        

        【讨论】:

          【解决方案5】:

          当然...我认为这应该可行...

          $files[] = array();
          $dir = opendir("/path/to/Audio") or die("Unable to open folder");
              while ($file = readdir($dir)) {
                  $cleanfile = basename($file);
                  $files[$cleanfile] = $file;
              }
              closedir($dir);
          

          我想应该可以...

          【讨论】:

            【解决方案6】:
            $results = array();
            $handler = opendir($directory);
            while ($file = readdir($handler)) {
              if ($file != "." && $file != "..") {
                $results[] = $file;
              }
            }
            closedir($handler);
            

            这应该可以,如果您想从数组中排除任何文件,只需将它们添加到 if 语句中,对于文件扩展名也是如此

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-08-24
              • 1970-01-01
              • 2021-11-22
              • 1970-01-01
              • 2020-09-30
              • 1970-01-01
              • 2011-01-15
              • 1970-01-01
              相关资源
              最近更新 更多