PHP获取子目录中的所有文件
我正在尝试获取10个子文件夹中的所有XML文件并对其进行解析。为此,我有以下代码: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
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;
}
也许这会有帮助:也许这会有帮助:非常感谢!工作如期!!非常感谢!工作如期!!