Ayant un peu galérer pour trouver comment faire une recherche récursive en utilisant les itérateurs fournies par la SPL, voici ma solution. Je ne garantis pas que ce soit la bonne manière, mais elle ne me semble pas particulièrement mauvaise.
Le code PHP du filtre :
PHP:
<?php
class PatternsSearchIterator extends FilterIterator{
private $extension;
public function __construct(Iterator $iterator, $extension){
parent::__construct($iterator);
$this->extension = $extension;
}
public function accept(){
return ( stripos( $this->current(), $this->extension) !== false );
}
}
?>
Et un exemple d'utilisation qui recherche tous les fichiers XML d'un répertoire :
PHP:
<?php
$extension = '.xml';
$dir = '/path/to/search';
$directory = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator(
$dir,
RecursiveDirectoryIterator::KEY_AS_FILENAME
)
);
$xmlFiles = new PatternsSearchIterator ($directory, $extension);
foreach($xmlFiles as $xml){
echo "$xml<br />";
}
?>