Skip to content

Instantly share code, notes, and snippets.

@brucekirkpatrick
Last active December 2, 2017 04:54
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save brucekirkpatrick/8528710 to your computer and use it in GitHub Desktop.
Save brucekirkpatrick/8528710 to your computer and use it in GitHub Desktop.
Function to return only the files in a directory, and optionally do this recursively.
<?php
function getFilesInDirectoryAsArray($directory, $recursive, $arrFilter=array()) {
$arrItems = array();
if(substr($directory, strlen($directory)-1, 1) != "/"){
$directory.="/";
}
if(count($arrFilter)){
$filterMap=array();
for($i=0;$i<count($arrFilter);$i++){
$filterMap[$arrFilter[$i]]=true;
}
var_dump($filterMap);
recurseDirectoryWithFilter($arrItems, $directory, $recursive, $filterMap);
}else{
recurseDirectory($arrItems, $directory, $recursive);
}
return $arrItems;
}
function recurseDirectory(&$arrItems, $directory, $recursive) {
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_dir($directory.$file)) {
if($recursive){
recurseDirectory($arrItems, $directory.$file."/", $recursive);
}
}else{
$arrItems[] = $directory . $file;
}
}
}
closedir($handle);
}
return $arrItems;
}
function recurseDirectoryWithFilter(&$arrItems, $directory, $recursive, &$filterMap) {
if ($handle = opendir($directory)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_dir($directory.$file)) {
if($recursive){
recurseDirectoryWithFilter($arrItems, $directory.$file."/", $recursive, $filterMap);
}
}else{
if(isset($filterMap[getFileExt($file)])){
$arrItems[] = $directory . $file;
}
}
}
}
closedir($handle);
}
return $arrItems;
}
function getFileExt($path){
$pos=strrpos($path, ".");
if($pos===FALSE){
return "";
}else{
return substr($path, $pos+1);
}
}
?>
@brucekirkpatrick
Copy link
Author

Use like this: var_dump(getFilesInDirectoryAsArray("/path/",true));

@brucekirkpatrick
Copy link
Author

Added support to filter the files by one or more file extensions. Usage: var_dump(getFilesInDirectoryAsArray("/path/",true, array("js", "css")));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment