PHP获取子目录中的所有文件

PHP获取子目录中的所有文件,php,xml,parsing,Php,Xml,Parsing,我正在尝试获取10个子文件夹中的所有XML文件并对其进行解析。为此,我有以下代码: public static function calculateEAXML ($dir) { $dh = opendir($dir); $folderNames = array(); $arr = array(); while (false !== ($folderName = readdir($dh))) { if ( $folderName[0] == "." || (substr($folderNam

我正在尝试获取10个子文件夹中的所有XML文件并对其进行解析。为此,我有以下代码:

public static function calculateEAXML ($dir) {
$dh  = opendir($dir);
$folderNames = array();
$arr = array();
while (false !== ($folderName = readdir($dh))) {
  if ( $folderName[0] == "." || (substr($folderName, -3) == "zip") ) {continue;}
  $folderNames[] = $folderName; 
  $dom = new DOMDocument;
  $dom->validateOnParse = true;
  foreach ($folderNames as $file) 
{
    if(is_dir($folderName)){ScanFiles::calculateEAXML($dir);}
    else{
    $df  = opendir($dir . $file);
    while (false !== ($file = readdir($df))) 
    {
        if ($file == "." || $file == ".."  ) {continue;}
        $dom->Load($dir . $folderName . "/" . $file);
        $arr[] = XML2Array::createArray($dom);
    }
  }
}
  return $arr;    
}
}
问题是它只解析一个目录中的文件,而完全忽略另一个目录。有没有办法让它解析所有目录中的所有文件?

这就是它的用途:

这是为了:


您的脚本存在许多问题,主要围绕着
foreach

  • if(is_dir($folderName))
    :变量
    $folderName
    不存在。我假设您应该在那里有
    $file
  • ScanFiles::calculateEAXML($dir):您正在再次扫描同一目录,但对响应不做任何操作
  • $df=opendir($dir.$file):如果文件不是目录,则尝试将其作为目录打开
  • 您的
    foreach
    循环位于while循环内
  • 以下是解决这些问题的尝试:

    public static function calculateEAXML($dir) {
        $dh  = opendir($dir);
        $folderNames = array();
        $arr = array();
    
        // Get all files and folders in the current directory
        while (false !== ($folderName = readdir($dh))) {
            if ($folderName[0] == "." || (substr($folderName, -3) == "zip")) {
                continue;
            }
            $folderNames[] = $folderName;
        }
    
        foreach ($folderNames as $file) {
            $filename = $dir . '/' . $file;
            if(is_dir($filename)){
                $arr = array_merge($arr, ScanFiles::calculateEAXML($filename));
            } else {
                $dom = new DOMDocument;
                $dom->validateOnParse = true;
                $dom->Load($filename);
                $arr[] = XML2Array::createArray($dom);
            }
        }
        return $arr;    
    }
    

    您的脚本存在许多问题,主要围绕着
    foreach

  • if(is_dir($folderName))
    :变量
    $folderName
    不存在。我假设您应该在那里有
    $file
  • ScanFiles::calculateEAXML($dir):您正在再次扫描同一目录,但对响应不做任何操作
  • $df=opendir($dir.$file):如果文件不是目录,则尝试将其作为目录打开
  • 您的
    foreach
    循环位于while循环内
  • 以下是解决这些问题的尝试:

    public static function calculateEAXML($dir) {
        $dh  = opendir($dir);
        $folderNames = array();
        $arr = array();
    
        // Get all files and folders in the current directory
        while (false !== ($folderName = readdir($dh))) {
            if ($folderName[0] == "." || (substr($folderName, -3) == "zip")) {
                continue;
            }
            $folderNames[] = $folderName;
        }
    
        foreach ($folderNames as $file) {
            $filename = $dir . '/' . $file;
            if(is_dir($filename)){
                $arr = array_merge($arr, ScanFiles::calculateEAXML($filename));
            } else {
                $dom = new DOMDocument;
                $dom->validateOnParse = true;
                $dom->Load($filename);
                $arr[] = XML2Array::createArray($dom);
            }
        }
        return $arr;    
    }
    

    也许这会有帮助:也许这会有帮助:非常感谢!工作如期!!非常感谢!工作如期!!