代码之家  ›  专栏  ›  技术社区  ›  Kaleem Nalband

使用PHP列出目录及其子目录中的所有.csv文件

  •  1
  • Kaleem Nalband  · 技术社区  · 8 年前

    MainFolder
      -User1Foder
           --User1File1.csv 
           --User1File2.csv
      -User2Folder
           --User2File1.csv
           --User2File2.csv
    

    我正在寻找一个php函数,可以列出所有的.csv文件在主文件夹。

    listAllcsv(MainFolder);
    

    输出

    User1File1.csv
    User1File2.csv
    User2File1.csv
    User2File2.csv
    

    代码已尝试

    function listFolderFiles($dir){
        $ffs = scandir($dir);
    
        unset($ffs[array_search('.', $ffs, true)]);
        unset($ffs[array_search('..', $ffs, true)]);
    
        // prevent empty ordered elements
        if (count($ffs) < 1)
            return;
    
        echo '<ol>';
        foreach($ffs as $ff){
            echo '<li>'.$ff;
            if(is_dir($dir.'/'.$ff)) listFolderFiles($dir.'/'.$ff);
            echo '</li>';
        }
        echo '</ol>';
    }
    

    但它列出了所有的子文件夹以及,我只寻找文件,而不是子文件夹。

    先谢谢你

    1 回复  |  直到 8 年前
        1
  •  2
  •   hassan    8 年前

    你需要看看 Iterators

    RecursiveDirectoryIterator

    function listFolders($dir) {
        $directory = new RecursiveDirectoryIterator($dir);
        $directory->setFlags(RecursiveDirectoryIterator::SKIP_DOTS);
    
        $files = new RecursiveIteratorIterator(
            $directory,
            RecursiveIteratorIterator::SELF_FIRST
        );
    
        $list = [];
        foreach ($files as $file) {
            if (
                $file->isDir() == false &&
                $file->getExtension() === 'csv'
            ) {
                $list[] = $file->getBasename();
            }
        }
    
        return $list;
    }