使用 PHP 列出目录及其子目录中的所有 .csv 文件
List all the .csv files from a directory and its subdirectories uisng PHP
我有一个上传 .csv 文件的目录。结构是这样的
MainFolder
-User1Foder
--User1File1.csv
--User1File2.csv
-User2Folder
--User2File1.csv
--User2File2.csv
我正在寻找一个 php 函数,它可以列出 MainFolder 中的所有 .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>';
}
但它也列出了所有子文件夹,我只查找文件而不是子文件夹。
提前致谢
你需要看看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;
}
我有一个上传 .csv 文件的目录。结构是这样的
MainFolder
-User1Foder
--User1File1.csv
--User1File2.csv
-User2Folder
--User2File1.csv
--User2File2.csv
我正在寻找一个 php 函数,它可以列出 MainFolder 中的所有 .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>';
}
但它也列出了所有子文件夹,我只查找文件而不是子文件夹。
提前致谢
你需要看看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;
}