質問

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

たとえば、ディレクトリ内のみの.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 />";
    }
}

あなたが同様の検索のためのglob()を使用することについて、このページをチェックアウトする場合があります:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top