我试图使用递归搜索指定目录中的文件返回。 我成功地实现了这一点,但是我想补充的几行代码,让我指定我想返回特定扩展名。

例如仅返回的.jpg目录中的文件。

下面是我的代码,

<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "<br/> \n";
}
?>

请让我知道我可以添加到上面的代码来实现这一点,谢谢

有帮助吗?

解决方案

<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$display = Array ( 'jpeg', 'jpg' );
foreach(new RecursiveIteratorIterator($it) as $file)
{
    if (in_array(strtolower(array_pop(explode('.', $file))), $display))
        echo $file . "<br/> \n";
}
?>

其他提示

您应该创建过滤器:

class JpegOnlyFilter extends RecursiveFilterIterator
{
    public function __construct($iterator)
    {
        parent::__construct($iterator);
    }

    public function accept()
    {
        return $this->current()->isFile() && preg_match("/\.jpe?g$/ui", $this->getFilename());
    }

    public function __toString()
    {
        return $this->current()->getFilename();
    }
}

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$it = new JpegOnlyFilter($it);
$it = new RecursiveIteratorIterator($it);

foreach ($it as $file)
    ...

尝试此,它使用允许的文件类型的数组和只有回声出该文件,如果文件扩展名的阵列内的存在。

<?php
$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
$allowed=array("pdf","txt");
foreach(new RecursiveIteratorIterator($it) as $file) {
    if(in_array(substr($file, strrpos($file, '.') + 1),$allowed)) {
        echo $file . "<br/> \n";
    }
}
?>

您也可能会发现,你可以通过允许的文件类型的数组你RecursiveDirectoryIterator类,只返回匹配的文件。

让PHP做的工作:

$directory = new RecursiveDirectoryIterator('path/to/directory/');
$iterator  = new RecursiveIteratorIterator($directory);
$regex     = new RegexIterator($iterator, '/\.jpe?g$/i', RecursiveRegexIterator::GET_MATCH);

echo '<pre>';
print_r($regex);

关于顶部投答案:我建立这个代码,其使用更少的函数,只有3,isset()array_flip()explode()代替4-功能。我测试的顶投票的答案,这是比我慢。我建议给我的一个尝试:

$it = new RecursiveDirectoryIterator("L:\folder\folder\folder");
foreach(new RecursiveIteratorIterator($it) as $file) {
    $FILE = array_flip(explode('.', $file));
    if (isset($FILE['php']) || isset($FILE['jpg'])) {
        echo  $file. "<br />";
    }
}

您可能想看看这个页面有关使用水珠()进行类似的搜索:

http://www.electrictoolbox.com/php-glob-find-files /

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top