Over a million developers have joined DZone.

Get (recursive) Directory Listing In Array

·
Updated to include drwitt's fix. Shame on me! Well, as long as I learn from my mistakes :)

Get a (recursive) directory listing in an array. Directory's are included in this list. If this behavior is not wanted, remove the two lines:

$file = $directory . "/" . $file;
$array_items[] = preg_replace("/\/\//si", "/", $file);

To get a non recursive directory listing, use it like this:

$files = directoryToArray("./", false);

And to get a recursive directory listing, use it like this:

$files = directoryToArray("./", true);

Once you have an array of files, you can iterate over the directories/files like this:

echo '
    '; foreach ($files as $file) { echo '
  • ' . $file . '
  • '; } echo '
';
or like this: echo '
    '; for ($i = 0; $i <= count($files); $i++) { echo '
  • ' . $files[$i] . '
  • '; } echo '
';
Code: function directoryToArray($directory, $recursive) { $array_items = array(); if ($handle = opendir($directory)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { if (is_dir($directory. "/" . $file)) { if($recursive) { $array_items = array_merge($array_items, directoryToArray($directory. "/" . $file, $recursive)); } $file = $directory . "/" . $file; $array_items[] = preg_replace("/\/\//si", "/", $file); } else { $file = $directory . "/" . $file; $array_items[] = preg_replace("/\/\//si", "/", $file); } } } closedir($handle); } return $array_items; } Hope someone can use it!
Topics:

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}