Deep recursive array of directory structure in PHP Deep recursive array of directory structure in PHP arrays arrays

Deep recursive array of directory structure in PHP


I recommend using DirectoryIterator to build your array

Here's a snippet I threw together real quick, but I don't have an environment to test it in currently so be prepared to debug it.

$fileData = fillArrayWithFileNodes( new DirectoryIterator( '/path/to/root/' ) );function fillArrayWithFileNodes( DirectoryIterator $dir ){  $data = array();  foreach ( $dir as $node )  {    if ( $node->isDir() && !$node->isDot() )    {      $data[$node->getFilename()] = fillArrayWithFileNodes( new DirectoryIterator( $node->getPathname() ) );    }    else if ( $node->isFile() )    {      $data[] = $node->getFilename();    }  }  return $data;}


A simple implementation without any error handling:

function dirToArray($dir) {    $contents = array();    # Foreach node in $dir    foreach (scandir($dir) as $node) {        # Skip link to current and parent folder        if ($node == '.')  continue;        if ($node == '..') continue;        # Check if it's a node or a folder        if (is_dir($dir . DIRECTORY_SEPARATOR . $node)) {            # Add directory recursively, be sure to pass a valid path            # to the function, not just the folder's name            $contents[$node] = dirToArray($dir . DIRECTORY_SEPARATOR . $node);        } else {            # Add node, the keys will be updated automatically            $contents[] = $node;        }    }    # done    return $contents;}


Based on the code of @soulmerge's answer. I just removed some nits and the comments and use $startpath as my starting directory. (THANK YOU @soulmerge!)

function dirToArray($dir) {    $contents = array();    foreach (scandir($dir) as $node) {        if ($node == '.' || $node == '..') continue;        if (is_dir($dir . '/' . $node)) {            $contents[$node] = dirToArray($dir . '/' . $node);        } else {            $contents[] = $node;        }    }    return $contents;}$r = dirToArray($startpath);print_r($r);