Подтвердить что ты не робот

Почему каждый раз, когда я использую scandir(), я получаю периоды в начале массива?

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

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

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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

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

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