Как мне найти первые 5 файлов в каталоге с помощью PHP?

#php

#php #массивы #файл #сортировка #глоб

Вопрос:

Как мне перечислить первые 5 файлов или каталогов в каталоге, отсортированных в алфавитном порядке с помощью PHP?

Комментарии:

1. Вам нужно, чтобы они были первыми 5 при сортировке по <имя / размер / дата> или просто любыми 5 файлами?

2. Никто, кто создает хороший glob ответ, используя шаблон для фильтрации каталогов?

Ответ №1:

Используя scandir() :

 array_slice(array_filter(scandir('/path/to/dir/'), 'is_file'), 0, 5);
 

array_filter() Вместе с is_file() обратным вызовом функции гарантирует, что мы просто обрабатываем файлы без необходимости написания цикла, нам даже не нужно заботиться о . и .. поскольку они являются каталогами.


Или с помощью glob() он не будет соответствовать именам файлов, таким как .htaccess :

 array_slice(glob('/path/to/dir/*.*'), 0, 5);
 

Или с помощью glob() array_filter() это будет соответствовать именам файлов, таким как .htaccess :

 array_slice(array_filter(glob('/path/to/dir/*'), 'is_file'), 0, 5);
 

Комментарии:

1. Отлично, есть ли способ отсортировать файлы по дате?

2. Это полезная старая тема. Но при применении array_filter он не будет работать в php 7.0

Ответ №2:

Это, вероятно, самый простой в использовании scandir , если вы не хотите сделать что-то более сложное. scandir также возвращает каталоги, поэтому мы будем фильтровать только разрешенные файлы:

 $items = scandir('/path/to/dir');
$files = array();
for($i = 0, $i < 5 amp;amp; $i < count($items); $i  ) {
    $fn = '/path/to/dir/' . $items[$i];
    if(is_file($fn)) {
        $files[] = $fn;
    }
}
 

Комментарии:

1. $i < 5 следует заменить на count($files) < 5

2. Должно ли это быть? $i < 5 и count($files) < 5 практически такие же, хотя $i < 5 и будут немного быстрее, поскольку не вызывают функцию

3. $ i также равно 5, когда найдено 5 каталогов… И OP хочет файлы

4. Нет необходимости зацикливаться там… Проверьте мой ответ.

5. @Alix в вашем ответе, что произойдет, если существует каталог (отличный от . and .. )?

Ответ №3:

Если вы думаете о низком уровне (упорядоченном по номеру индекса), то функция readdir для вас.

В противном случае, если вы хотите, чтобы они располагались в алфавитном порядке, scandir может быть лучшим вариантом. Как в:

 $firstfive = array_slice(scandir("."), 2, 5);
 

Обратите внимание, что первые две записи, возвращаемые scandir «.» и «..».

Комментарии:

1. Мне нравится scandir. Но разве это не сканирует все файлы в каталоге?