Как построить индексированный массив имен файлов .html, которые существуют в каталоге? - PullRequest
0 голосов
/ 13 октября 2018

Я использую этот php-код для получения всех html-файлов в данном каталоге:

$dirpath = ".....";
$filelist = preg_grep('~\.(html)$~', scandir($dirpath));

Теперь я хочу получить определенный элемент в массиве, например:

echo $filelist[0];

Это не удалось.В моем каталоге 52 файла, и count($filelist) возвращает '52', но для получения первого элемента мне нужно использовать echo $filelist[3]; Последний элемент получает адреса по индексу 54. Что это?Почему я не могу адресовать их индексом 0-51?

Редактировать: Возможный дубликат только объясняет сдвиг 2 индексов, какой третий?Однако: array_values решил проблему.

Ответы [ 4 ]

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

Использование scandir(), затем применение фильтра регулярных выражений, а затем повторное индексирование - неэффективный подход, когда glob() может доставить то, что вы хотите, за один вызов.

Следующее сгенерирует только массив.html файлы.

Если вы хотите увидеть путь к файлу, добавленный к имени файла:

$filelist = glob($dirpath . "*.html");  // you may need to add a slash before the filename

Если вы хотите видеть только имена файлов:

chdir($dirpath);
$filelist = glob("*.html");
0 голосов
/ 13 октября 2018

Используйте функцию array_values() для сброса числового индекса, чтобы начать с 0.

Попробуйте:

$dirpath = ".....";
$filelist = array_values(preg_grep('~\.(html)$~', scandir($dirpath)));

// print the first value
echo $filelist[0];
0 голосов
/ 13 октября 2018

Просто используйте

$filelist = array_values($filelist);

Ваша функция - выбор элементов из уже проиндексированного массива, поэтому ключи не в последовательности.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...