June 5, 2011, 4:36 p.m.
posted by stackme
Getting a List of Filenames Matching a Pattern
Use a FilterIterator subclass with DirectoryIterator. The FilterIterator subclass needs its own accept( ) method that decides whether or not a particular value is acceptable. The code in Figure only accepts filenames that end with common extensions for images.
Using a FilterIterator
The FilterIterator encloses a DirectoryIterator and only allows certain elements to emerge. It's up to the accept( ) method to return true or false to indicate whether a particular element (accessed with $this->current( )) is OK. In Figure, accept( ) uses a regular expression to make that determination, but your code can use any logic you like.
If your pattern can be expressed as a simple shell "glob" (e.g. *.*), use the glob( ) function to get the matching filenames. Figure finds all the text files in a particular directory.
Using glob( )
The glob( ) function returns an array of matching full pathnames. If no files match the pattern, glob( ) returns false.
Recipe 24.9 details iterating through each file in a directory recursively; documentation on FilterIterator at http://www.php.net/~helly/php/ext/spl/classFilterIterator.html and on glob( ) at http://www.php.net/glob; information about shell pattern matching is available at http://www.gnu.org/software/bash/manual/bashref.html#SEC35.