以递归方式浏览目录并获取文件名

时间:2016-08-28 15:12:08

标签: php

我必须做一个浏览带有子目录的目录的php脚本。 对于每个子目录(也许是子子目录),我必须获取文件名及其父目录。

你有一个简单的解决方案吗? 谢谢

2 个答案:

答案 0 :(得分:3)

由于我必须为我的网站创建相同的功能,我将发布我的功能作为参考。

function recursiveFileSearch($path, $searchmask = "*") {
    $path = rtrim($path, '/');

    $files = array();
    if(is_array($searchmask)) {
        for($i = 0; $i < count($searchmask); $i++) {
            $files = array_merge($files, glob($path.'/'.$searchmask[$i]));
        }
        sort($files);
    } else {
        $files = glob($path.'/'.$searchmask);
    }


    $dirs = glob($path.'/*', GLOB_ONLYDIR);
    foreach($dirs as $dir) {
        if(is_dir($dir)) {
            $files = array_merge($files, recursiveFileSearch($dir, $searchmask));
        }
    }

    sort($files);
    return $files;
}

答案 1 :(得分:2)

我不是100%肯定你在问什么,但如果你看看scandir documentation,第一个评论有一个非常有用的递归扫描功能。

<?php 
function dirToArray($dir) { 

      $result = array(); 

      $cdir = scandir($dir); 
      foreach ($cdir as $key => $value) 
      { 
         if (!in_array($value,array(".",".."))) 
         { 
            if (is_dir($dir . DIRECTORY_SEPARATOR . $value)) 
            { 
               $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value); 
            } 
            else 
            { 
               $result[] = $value; 
            } 
         } 
      } 

      return $result; 
   } 
?> 

结果将采用以下格式。

Array 
( 
  [subdir1] => Array 
  ( 
     [0] => file1.txt 
     [subsubdir] => Array 
     ( 
        [0] => file2.txt 
        [1] => file3.txt 
     ) 
  ) 
  [subdir2] => Array 
  ( 
   [0] => file4.txt 
  } 
)