在scandir数组中包含JUST文件?

Rbn*_*Rbn 19 php scandir

我有一个数组,我正从SCANDIR回来,但它包含了"."".."我不希望它.

我的代码:

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

我正在对文件扩展名进行字符串替换,从而导致[0]和[1]显示为空,但它们是"."".."

array(4) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(4) "test"
[3]=>
string(4) "home"
}
Run Code Online (Sandbox Code Playgroud)

我将如何删除"."".."从阵列?

lef*_*ben 33

您可以使用array_filter.

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

请注意,这会过滤掉所有目录,只留下文件和符号链接.如果你真的只想排除开头的文件(和目录).,那么你可以这样做:

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

  • 惊人的。完美的解释。非常感谢。 (2认同)
  • 仅仅因为初级程序员认为他们只是在寻找“.”和“..”,根据我的经验,这种情况很少见。问题表明他正在将文件名放入数据库中。因此我的第一个答案是过滤掉目录,其中包括`.`和`..`。 (2认同)

min*_*sky 18

在scandir中删除点作为文件的最快方法

$files = array_slice(scandir('/path/to/directory/'), 2); 
Run Code Online (Sandbox Code Playgroud)

PHP手册

  • 这正是我想要的.简单直接.这应被视为最佳答案 (3认同)
  • 我的目录中从未见过“-”。我认为在大多数情况下这都会很好地工作。 (2认同)

Jon*_*ren 8

array_diff 会做你想要的:

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

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