Как мне перечислить первые 5 файлов или каталогов в каталоге, отсортированном по алфавиту с помощью PHP?
Как найти первые 5 файлов в каталоге с PHP?
- Вам нужно, чтобы они были первыми 5 файлами при сортировке по ‹названию/размеру/дате› или просто любыми 5 файлами? 22.01.2010
- Никто не создает хороший ответ
glob
, используя шаблон для фильтрации каталогов? 22.01.2010
Ответы:
Используя 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);
Вероятно, проще всего использовать scandir
, если только вы не хотите сделать что-то более сложное. scandir
также возвращает каталоги, поэтому мы будем фильтровать только файлы:
$items = scandir('/path/to/dir');
$files = array();
for($i = 0, $i < 5 && $i < count($items); $i++) {
$fn = '/path/to/dir/' . $items[$i];
if(is_file($fn)) {
$files[] = $fn;
}
}
$i < 5
следует заменить на count($files) < 5
22.01.2010 $i < 5
и count($files) < 5
почти одинаковы, хотя $i < 5
будет немного быстрее, так как не вызывает функцию 22.01.2010 .
и ..
)? 22.01.2010 array_filter()
в сочетании с обратным вызовом функции is_file()
. 22.01.2010 array_filter()
с is_file()
там есть. 22.01.2010 Если вы думаете о низком уровне (упорядоченном по номеру инода), то readdir — это функция для вас.
В противном случае, если вы хотите, чтобы они были в алфавитном порядке, тогда лучше использовать scandir. вариант. Как в:
$firstfive = array_slice(scandir("."), 2, 5);
Обратите внимание, что первые две записи, возвращаемые scandir
, это "." а также "..".