Вы также можете использовать SPL для фильтрации содержимого DirectoryIterator
, используя функцию isImage
, расширяя абстрактный класс FilterIterator
.
class ImageIterator extends FilterIterator {
public function __construct($path)
{
parent::__construct(new DirectoryIterator($path));
}
public function accept()
{
return isImage($this->getInnerIterator());
}
}
Затем вы можете использовать iterator_count
(или реализовать интерфейс Countable
и использовать встроенную функцию count
), чтобы определить количество изображений. Например:
$images = new ImageIterator('/path/to/images');
printf('Found %d images!', iterator_count($images));
Используя этот подход, в зависимости от того, как вам нужно использовать этот код, может иметь смысл переместить функцию isImage
в класс ImageIterator
, чтобы все аккуратно обернуть в одном месте.