Как мне найти первые 5 файлов в каталоге с PHP? - PullRequest
3 голосов
/ 22 января 2010

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

Ответы [ 3 ]

19 голосов
/ 22 января 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);
1 голос
/ 22 января 2010

Вероятно, наиболее просто использовать 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;
    }
}
0 голосов
/ 22 января 2010

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

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

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

Обратите внимание, что первые две записи, возвращаемые scandir, являются "." и "..".

...