Get all subdirectories of a given directory in PHP

To get the subdirectories present in a directory, PHP provides several methods. The glob() function with appropriate filters is the most common approach.

Using glob() with is_dir Filter

This method gets all items and filters them to return only directories ?

<?php
    $all_sub_dirs = array_filter(glob('*'), 'is_dir');
    print_r($all_sub_dirs);
?>
Array (
    [0] => documents
    [1] => images
    [2] => scripts
    [3] => templates
)

Using glob() with GLOB_ONLYDIR Flag

This is the most efficient method as it directly returns only directories ?

<?php
    $directory_path = '/path/to/directory';
    $all_dirs = glob($directory_path . '/*', GLOB_ONLYDIR);
    print_r($all_dirs);
?>
Array (
    [0] => /path/to/directory/subfolder1
    [1] => /path/to/directory/subfolder2
    [2] => /path/to/directory/subfolder3
)

Using scandir() with is_dir Check

Alternative approach using scandir() to get all directory contents and filter directories ?

<?php
    $directory = '.';
    $items = scandir($directory);
    $subdirs = array();
    
    foreach ($items as $item) {
        if ($item != '.' && $item != '..' && is_dir($directory . '/' . $item)) {
            $subdirs[] = $item;
        }
    }
    print_r($subdirs);
?>
Array (
    [0] => assets
    [1] => config
    [2] => uploads
)

Comparison

Method Performance Flexibility Best Use Case
glob() with is_dir Good Medium Simple directory listing
glob() with GLOB_ONLYDIR Best Low Fast directory-only retrieval
scandir() with is_dir Moderate High Custom filtering requirements

Conclusion

Use glob() with GLOB_ONLYDIR for the fastest directory retrieval. For more complex filtering, combine scandir() with is_dir() checks.

Updated on: 2026-03-15T08:27:02+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements