32

再帰検索を使用して、指定したディレクトリ内のファイルを返そうとしています。これは成功しましたが、返される特定の拡張子を指定できるようにするコードを数行追加したいと考えています。

たとえば、ディレクトリ内の .jpg ファイルのみを返します。

ここに私のコードがあります、

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

これを達成するために上記のコードに何を追加できるか教えてください、ありがとう

4

9 に答える 9

40
<?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";
}
?>
于 2009-12-07T14:46:11.103 に答える
20

フィルタを作成する必要があります。

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)
    ...
于 2009-12-07T14:58:27.877 に答える
7

これを試してみてください。許可されたファイルタイプの配列を使用し、ファイル拡張子が配列内に存在する場合にのみファイルをエコーアウトします。

<?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一致するファイルのみを返すこともできます。

于 2009-12-07T14:46:39.527 に答える
6

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);
于 2016-06-21T11:18:07.413 に答える
1

投票数が最も多かった回答について: 4 つの関数ではなく、3 つ、 isset()、のみ、より少ない関数を使用するこのコードを作成しました。トップ投票の回答をテストしましたが、私のものよりも遅かったです。私は試してみることをお勧めします:array_flip()explode()

$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 />";
    }
}
于 2016-07-16T21:11:18.417 に答える
-1

同様の検索に glob() を使用する方法については、次のページをご覧ください。

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

于 2013-10-17T10:08:10.073 に答える