Список всех файлов .csv из каталога и его подкаталогов с использованием PHP

У меня есть каталог, в который загружается файл .csv. структура такая

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

Я ищу функцию php, которая может перечислить все файлы .csv в MainFolder.

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>';
}

Но в нем также перечислены все подпапки, я ищу только файлы, а не подпапку.

Заранее спасибо


person Kaleem Nalband    schedule 02.10.2018    source источник
comment
я не понимаю документы. пожалуйста, помогите, как написать функцию, которая перечисляет все файлы csv, если передать ей имя каталога. для моего случая я передам основную папку   -  person Kaleem Nalband    schedule 02.10.2018
comment
Вы уже знаете, как проверить, является ли заданный путь файлом или каталогом, так в чем проблема сделать эхо-вывод пути зависимым от этого, тогда…?   -  person misorude    schedule 02.10.2018


Ответы (1)


Вам нужно взглянуть на 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;
}
person hassan    schedule 02.10.2018