Почему всякий раз, когда я использую scandir (), я получаю точки в начале массива? - PullRequest
27 голосов
/ 20 августа 2011

Почему при использовании scandir () я получаю точки в начале массива?

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

Ответы [ 5 ]

95 голосов
/ 20 августа 2011

В каждом списке каталогов присутствуют две записи:

  • . относится к текущему каталогу
  • .. относится к родительскому каталогу (или корню, если текущий каталог является корнем)

Вы можете удалить их из результатов, отфильтровав их из результатов scandir:

$allFiles = scandir(__DIR__); // Or any other directory
$files = array_diff($allFiles, array('.', '..'));
26 голосов
/ 20 августа 2011

Это текущий (.) и родительский (..) каталоги. Они присутствуют во всех каталогах и используются для ссылки на сам каталог и его прямого родителя.

5 голосов
/ 01 сентября 2017

Чтобы удалить . и .. из scandir, используйте эту функцию:

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

Команда array_values переиндексирует массив так, чтобы он начинался с 0. Если вы неЕсли переиндексировать массив, принятый ответ будет работать нормально.Просто: array_diff(scandir($dir), array('..', '.')).

4 голосов
/ 20 августа 2011

В конвенции Unix. ссылка на текущий каталог, а .. ссылка на родительский каталог. Оба они существуют в виде файла в индексе каталога.

0 голосов
/ 21 октября 2018

В одной строке кода:

$files=array_slice(scandir('/path/to/directory/'), 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...