Question

How would I list the first 5 files or directories in directory sorted alphabetically with PHP?

Was it helpful?

Solution

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);

OTHER TIPS

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;
    }
}

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 "..".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top