Include JUST files in scandir array?

元气小坏坏 提交于 2019-11-26 23:03:04

问题


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?


回答1:


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] !== '.';
});



回答2:


Fastest way to remove dots as files in scandir

$files = array_slice(scandir('/path/to/directory/'), 2); 

From the PHP Manual




回答3:


array_diff will do what you're looking for:

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

http://php.net/manual/en/function.array-diff.php




回答4:


I am aware erknrio provided an answer for this, but here is a cleaner way of getting an array of files without directories (modified to be more efficient):

$dirPath = 'dashboard';

$dir = scandir($dirPath);

foreach($dir as $index => &$item)
{
    if(is_dir($dirPath. '/' . $item))
    {
        unset($dir[$index]);
    }
}

$dir = array_values($dir);



回答5:


You can use this snippet. It returns just files in directory:

function only_files($dir_element) {
    if (!is_dir($dir_element)) {
        return $dir_element;
    }
}

function givemefiles($dir) {
    $scanned_dir = scandir($dir);
    return array_filter($scanned_dir, "only_files");
}

$dir_path = '../pages';

givemefiles($dir_path);
echo "<pre>";
var_dump($scanned_dir);
echo "</pre>";



回答6:


simply use preg_replace to remove all kind of hidden's file from directory

$files = array(".", "..", "html", ".~html", "shtml");    
$newfiles = preg_grep('/^([^.])/', scandir($files));


来源:https://stackoverflow.com/questions/14680121/include-just-files-in-scandir-array

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!