Programmer
Programmer

Reputation: 157

Retreiving files based on a particular pattern

I am using this function to retreive files from directory and sub-directories. How can I display only files with _lang.php within this directory and sub-directories?

function getDirContents($dir, &$results = array()){
    $files = scandir($dir);

    foreach($files as $key => $value){
        $path = realpath($dir.DIRECTORY_SEPARATOR.$value);
        if(!is_dir($path)) {
            $results[] = $path;
        } else if($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }

    return $results;
}
$dir = './test/';
var_dump(getDirContents($dir));

Upvotes: 1

Views: 31

Answers (1)

Wee Zel
Wee Zel

Reputation: 1324

answered a question like this earlier, try using Iterator Classes

<?php
function getDirContents($directory, $pattern)
{
    $result = array();
    $objRecursiveDirectoryIterator = new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS);
    $objRecursiveIteratorIterator = new RecursiveIteratorIterator($objRecursiveDirectoryIterator);
    // use RegexIterator() to grab only files that match $pattern
    $objRegexIterator = new RegexIterator($objRecursiveIteratorIterator, $pattern, RecursiveRegexIterator::GET_MATCH);

    // iterate through all the results
    foreach ($objRegexIterator as $arrMatches) {
       $result[] = $arrMatches[0];
    }
    return $result;
}

$dir = './test/';
$arrDirContents = getDirContents($dir, "~^.+_lang\.php$~i");
var_dump($arrDirContents);

Upvotes: 2

Related Questions