Как сказал @Tessmore , итераторы Spl имеют удивительный соус .Согласно документам , вам нужен только PHP> 5.1 для основных итераторов.
Перекрестная публикация примера -
DirectoryIterator
и LimitIterator
являются моими новыми лучшими друзьями, хотя glob
, кажется, делает предварительную фильтрацию легче.Вы также можете написать пользовательский FilterIterator
.Требуется PHP> 5.1, я думаю.
Нет предварительного фильтра:
$dir_iterator = new DirectoryIterator($dir);
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);
Предварительный фильтр Glob:
$dir_glob = $dir . '/*.{jpg,gif,png}';
$dir_iterator = new ArrayObject(glob($dir_glob, GLOB_BRACE));
$dir_iterator = $dir_iterator->getIterator();
$paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);
Затем сделайте свое дело:
foreach ($paginated as $file) { ... }
Обратите внимание, что в случае примера DirectoryIterator
, $file
будет экземпляром SplFileInfo
тогда как glob
пример - это просто путь к диску.