为什么每当我使用scandir()时我都会在数组的开头接收句点?

时间:2011-08-20 14:33:07

标签: php directory

为什么每当我使用scandir()时我都会在数组的开头接收句点?

Array
(
    [0] => .
    [1] => ..
    [2] => bar.php
    [3] => foo.txt
    [4] => somedir
)
Array
(
    [0] => somedir
    [1] => foo.txt
    [2] => bar.php
    [3] => ..
    [4] => .
)

5 个答案:

答案 0 :(得分:95)

每个目录列表中都有两个条目:

  • .指的是当前目录
  • ..指的是父目录(如果当前目录是根目录,则为根目录)

您可以将结果从scandir的结果中删除,从结果中删除它们:

$allFiles = scandir(__DIR__); // Or any other directory
$files = array_diff($allFiles, array('.', '..'));

答案 1 :(得分:26)

这些是当前(.)和父(..)目录。它们存在于所有目录中,用于引用目录本身及其直接父级。

答案 2 :(得分:4)

在Unix惯例中。是指向当前目录的链接,而..是指向父目录的链接。它们都作为目录索引中的文件存在。

答案 3 :(得分:3)

要从.移除..scandir,请使用此功能:

function scandir1($dir)
{
    return array_values(array_diff(scandir($dir), array('..', '.')));
}

array_values命令重新索引数组,使其从0开始。如果您不需要重新索引数组,那么接受的答案将正常工作。简单地说:array_diff(scandir($dir), array('..', '.'))

答案 4 :(得分:0)

在一行代码中:

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