PHP越来越子目录
问题描述:
我试图让所有的XML文件在我的10个子文件夹,并解析这些文件。要做到这一点,我有以下代码:PHP越来越子目录
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;
}
+0
非常非常感谢!按预期工作! – Jack
答
这是glob是:
foreach (glob("*.xml") as $filename) {
// do sth with the file, $filename holds the current file
}
也许这将帮助:http://*.com/a/1860417/5440709 – Kanti