Wyc*_*yck 3 php directory spl iterator file
简单的目录迭代器,它是递归的并显示所有文件和目录/子目录.
我没有看到任何内置的功能,以排除某些文件类型,例如在下面的例子中,我不希望输出的任何图像相关的文件,如.jpg,.png等我知道有这样做的几种方法,寻求建议哪个是最好的.
$scan_it = new RecursiveDirectoryIterator("/example_dir");
foreach(new RecursiveIteratorIterator($scan_it) as $file) {
echo $file;
}
Run Code Online (Sandbox Code Playgroud)
Age*_*rum 11
更新:
好的,所以我是个白痴.PHP内置了这个:pathinfo()
试试这个:
$filetypes = array("jpg", "png");
$filetype = pathinfo($file, PATHINFO_EXTENSION);
if (!in_array(strtolower($filetype), $filetypes)) {
echo $file;
}
Run Code Online (Sandbox Code Playgroud)
原答案:
为什么不运行substr()文件名并查看它是否与要排除的文件类型的扩展名匹配:
$scan_it = new RecursiveDirectoryIterator("/example_dir");
foreach(new RecursiveIteratorIterator($scan_it) as $file) {
if (strtolower(substr($file, -4)) != ".jpg" &&
strtolower(substr($file, -4)) != ".jpg") {
echo $file;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式使其更容易:
if (!preg_match("/\.(jpg|png)*$/i", $file, $matches)) {
echo $file;
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以使用数组来跟踪文件类型:
$filetypes = array("jpg", "png");
if (!preg_match("/\.(" . implode("|", $filetypes) . ")*$/i", $file, $matches)) {
echo $file;
}
Run Code Online (Sandbox Code Playgroud)
从 PHP 5.4 开始可以使用\RecursiveCallbackFilterIterator
$iterator = new \RecursiveDirectoryIterator(getcwd(), \RecursiveDirectoryIterator::SKIP_DOTS);
$iterator = new \RecursiveCallbackFilterIterator(
$iterator,
function ($item) {
return $item->getExtension() === 'php' ? true : false;
}
);
Run Code Online (Sandbox Code Playgroud)
迭代器现在将只包含 PHP 文件。
foreach($iterator as $file) {
echo $file;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12396 次 |
| 最近记录: |