How would I list the first 5 files or directories in directory sorted alphabetically with PHP?
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 "..".
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;
}
}
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);