Si cela peut servir à certains voici la batterie de tests utilisée. Si vous avez des améliorations à suggérer...
$dossier = 'PHOTOS/';
$matche = '#^j#ui';
class Filtre_fin extends FilterIterator {
public $posi = 0;
public $match;
public $test=true;
public function _construct($iterator) {}
public function accept()
{
if (preg_match($this->match,parent::current()->getFilename()))
{
$this->test = false;
return true;
}
if ($this->test) $this->posi++;
}
}
$time = microtime(true);
$dir = new FilesystemIterator($dossier,FilesystemIterator::KEY_AS_FILENAME);
$f2 = new Filtre_fin($dir);
$f2->match = $matche;
foreach ($f2 as $key => $value) echo $key.'<br />';
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo '<br />';
echo 'index = '.$f2->posi.'<br />';
echo 'match = '.iterator_count($f2).'<br />';
echo '<br />';
echo 'durée FilesystemIterator + FilterIterator et preg_match : ' . $time_tot.'<br />';
echo '<br />';
echo '<br />';
$time = microtime(true);
$files_s = new FilesystemIterator($dossier,FilesystemIterator::KEY_AS_FILENAME);
$i = 0;
$j = 0;
$m = true;
foreach ($files_s as $key => $value)
{
if (preg_match($matche,$key)) {echo $key.'<br />';$m=false;$j++;}
if ($m) $i++;
}
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo '<br />';
echo 'index = '.$i.'<br />';
echo 'match = '.$j.'<br />';
echo '<br />';
echo 'durée FilesystemIterator et preg_match : ' . $time_tot.'<br />';
echo '<br />';
echo '<br />';
$time = microtime(true);
$files_s = new FilesystemIterator($dossier,FilesystemIterator::KEY_AS_FILENAME);
$r = new RegexIterator($files_s, $matche, RegexIterator::MATCH, RegexIterator::USE_KEY);
foreach ($r as $key => $value) echo $key.'<br />';
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo '<br />';
echo 'index = introuvable <br />';
echo 'match = '.iterator_count($r).'<br />';
echo '<br />';
echo 'durée exécution FilesystemIterator + RegexIteraor : ' . $time_tot.'<br />';
echo '<br />';
echo '<br />';
A noter que dans tous les cas j'utilise FilesystemIterator::KEY_AS_FILENAME car j'ai remarqué un petit gain de performance du fait d'afficher directement $key plutôt que $value->getFilename().