:: DECISION::
using @RomanPerekhrest answer with a little modification, I have what I need. This adds several directories to search recursively, as well as to filter specific folders (in my case: "_thumbs"). The final code is below:
$dir1 = new RecursiveDirectoryIterator("./folder01");
$dir2 = new RecursiveDirectoryIterator("./folder02");
$dir3 = new RecursiveDirectoryIterator("./folder03");
$iterators = new AppendIterator();
$filter = function ($file, $key, $iterator) {
if ($iterator->hasChildren() && $file->getFilename() != "_thumbs") {
return true;
}
return $file->isFile();
};
$iterators->append(new RecursiveIteratorIterator( $dir1 ));
$iterators->append( $dir2 );
$iterators->append(new RecursiveIteratorIterator(new RecursiveCallbackFilterIterator($dir3, $filter)));
$rgIt = new RegexIterator($iterators, "/^.+\.jpg$/i");
$files = iterator_to_array($rgIt);
:: Original Question:
RegexIterator. , , RecursiveIteratorIterator. $dir3 , , RecursiveIteratorIterator, "_thumbs" , . RegexIterator .jpg, , "_thumbs" .
$dir1 = new RecursiveDirectoryIterator("./folder01");
$dir2 = new RecursiveDirectoryIterator("./folder02");
$dir3 = new RecursiveDirectoryIterator("./folder03");
$iterators = new AppendIterator();
$iterators->append(new RecursiveIteratorIterator( $dir1 ));
$iterators->append( $dir2 );
$iterators->append(new RecursiveIteratorIterator( $dir3 ));
$rgIt = new RegexIterator($iterators, "/^.+\.jpg$/i");
$files = iterator_to_array($rgIt);
usort($files, function($a, $b){
if(filectime($a) == filectime($b)){
return 0;
}
return filectime($a) > filectime($b) ? -1 : 1;
});
$files = array_slice($files, 0 , 18);
:: EDIT01::
, , . RecursiveFilterIterator, , . , , "Argument 1 passed to RecursiveFilterIterator::__construct() must implement interface RecursiveIterator, instance of AppendIterator given".
$dir1 = new RecursiveDirectoryIterator("./folder01");
$dir2 = new RecursiveDirectoryIterator("./folder02");
$dir3 = new RecursiveDirectoryIterator("./folder03");
$iterators = new AppendIterator();
$iterators->append(new RecursiveIteratorIterator( $dir1 ));
$iterators->append( $dir2 );
$iterators->append(new RecursiveIteratorIterator( $dir3 ));
class DirFilter extends RecursiveFilterIterator{
public function accept(){
$excludes = "/_thumbs";
return !(in_array($this->getFilename(), $excludes));
}
}
$filterItr = new DirFilter($iterators);
$rgIt = new RegexIterator($filterItr, "/^.+\.jpg$/i");
$files = iterator_to_array($rgIt);