Include JUST files in scandir array?

Rbn picture Rbn · Feb 4, 2013 · Viewed 35.9k times · Source

I have an array I'm getting back from scandir, but it contains "." and ".." and I don't want it to.

My code:

$indir = scandir('../pages');
$fileextensions = array(".", "php", "html", "htm", "shtml");
$replaceextensions = str_replace($fileextensions, "", $indir);

I am doing a string replace on the file extensions, thus causing [0] and [1] to appear empty, but they are "." and ".."

array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}

How would I remove the "." and ".." from the array?

Answer

leftclickben picture leftclickben · Feb 4, 2013

You can use array_filter.

$indir = array_filter(scandir('../pages'), function($item) {
    return !is_dir('../pages/' . $item);
});

Note this filters out all directories and leaves only files and symlinks. If you really want to only exclude only files (and directories) starting with ., then you could do something like:

$indir = array_filter(scandir('../pages'), function($item) {
    return $item[0] !== '.';
});