1

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));
Programmer
  • 157
  • 1
  • 14
  • [glob()](http://php.net/manual/en/function.glob.php) is the function for you –  Sep 10 '17 at 21:48

1 Answers1

2

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);
Wee Zel
  • 1,294
  • 9
  • 11