问题
How would I list the first 5 files or directories in directory sorted alphabetically with PHP?
回答1:
Using scandir()
:
array_slice(array_filter(scandir('/path/to/dir/'), 'is_file'), 0, 5);
The array_filter()
together with the is_file()
function callback makes sure we just process files without having to write a loop, we don't even have to care about .
and ..
as they are directories.
Or using glob()
- it won't match filenames like .htaccess
:
array_slice(glob('/path/to/dir/*.*'), 0, 5);
Or using glob()
+ array_filter()
- this one will match filenames like .htaccess
:
array_slice(array_filter(glob('/path/to/dir/*'), 'is_file'), 0, 5);
回答2:
It's probably most simple to use scandir
, unless you want to do something a bit more complex. scandir
returns directories as well, so we'll filter to only allow files:
$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;
}
}
回答3:
If you're thinking low level (ordered by inode number), then readdir is the function for you.
Otherwise, if you want them alphabetical, then scandir might be a better option. As in:
$firstfive = array_slice(scandir("."), 2, 5);
Note that the first two entries returned by scandir
are "." and "..".
来源:https://stackoverflow.com/questions/2113565/how-do-i-find-the-first-5-files-in-a-directory-with-php