php scandir产生额外的元素(2点)

时间:2016-04-28 06:36:01

标签: scandir

您好,

我在名为content的目录中有以下文件:index.php,page1.php,page2.php和page3.php。

然后我有了这段代码:

 $column = scandir("content");
 foreach ($column as $value) {   
  $stvalue = str_replace(".php", "", $value);    
  echo "<div>$stvalue</div>";
}

然而,这就是我得到的:

<div>.</div>
<div>..</div>
<div>index</div>
<div>page1</div>
<div>page2</div>
<div>page3</div>

前两个元素是什么?我没有这样的文件,所以我不明白。

谢谢。

3 个答案:

答案 0 :(得分:3)

。 - 是引用当前目录的特殊目录。

.. - 也是一个特殊目录,它引用了父目录。

要删除特殊目录,我可以考虑一些选项:

1

foreach(glob("*.php") as $filename) {
    echo "<div>$filename</div>";
}

2

$files = array_diff(scandir("content"), array('..', '.'));
foreach($files as $file) { ... }

3

foreach ($files as $file) {    
    if($file != '.' and $file != '..') { ... } 
}

以上所有都是替代方案。如果您使用scandir(),则无需使用glob(),反之亦然。 glob() - 期待一种模式。也可以为它提供如下路径:
glob("[path]/*.php") - 这将列出位于路径中的任何php文件。可以在PHP - glob()

找到glob()文档

答案 1 :(得分:1)

$column = scandir("content");
foreach ($column as $value) {   
$stvalue = str_replace(".php", "", $value); 
if($stvalue != '.' || $stvalue != '..')   {
echo "<div>$stvalue</div>";
}
}

答案 2 :(得分:0)

.指的是当前目录。 ..指的是父目录。 这就是在命令提示符下键入cd ..将更改为父目录的原因。在DOS,每个版本的Windows,Mac OS X中都有这种方式,它不仅仅是Linux和UNIX的变体。

如果您不想在页面上显示它们,只需使用array_slice跳过前两个条目。