PHP 在多个目录中输出多个文件
PHP Output Multiple Files In Multiple Directories
我有一个名为 PDFS 的主目录,它有 5 个代表年份的子目录(2011、2012、2013、2014、2015)。在每个 "year directory" 中有 11 个 pdf。我需要访问 PDFS 目录并获取所有 "year directories",然后获取每个 "year directory" 中的所有 pdf 以显示在页面上。因此,例如 2011 "year directory" 中的 pdf 将列在 2011 标题下。与 2012 年、2013 年等相同。我尝试了很多不同的东西。我可以使用 scandir() 输出 "year directories"。我可以使用 foreach 循环和 glob() 在单个 "year directory" 中输出文件。除了在每个 "year directory" 上使用 glob() 执行多个 foreach 循环外,我这辈子都想不出如何输出每个 "year directory's" 文件。必须有一种更动态的方式来设置它。有什么建议么?我觉得我需要在 foreach 中使用某种 foreach?这是我正在处理的内容:
//set main directory
$dir = 'PDFS';
//gets sub directories of PDFS directory
$directories = scandir($dir);
//removes the first to indexes in the directories array that are just dots
unset($directories[0]);
unset($directories[1]);
//outputs an array of the sub directories from scandir() starting at index 2
print_r($directories);
//initialize $i variable for loop
$i=0;
//if I manually set the $dir variable to "PDFS/2011/*" this will output links
//to each pdf inside the 2011 year directory
foreach(glob($dir) as $file) {
$i++;
echo "<a href='$file'>$file</a><br />";
}
您走对了,这段代码应该可以解决问题:
//set main directory
$mainDir = 'PDFS';
//gets sub directories of PDFS directory
$subDirectories = scandir($mainDir);
//removes the first two indexes in the directories array that are just dots
unset($subDirectories[0]);
unset($subDirectories[1]);
// first loop through all sub directories ...
foreach($subDirectories as $subDirectory) {
echo '<h1>'.$subDirectory.'</h1>';
// ... and then loop through all files in each sub directory
foreach(glob($mainDir.'/'.$subDirectory.'/*') as $file) {
echo "<a href='$file'>$file</a><br />";
}
}
为了更好地理解,我更改了一些 var 名称。
几件事:
不需要计数变量 i
因为你使用了 foreach。
如果您手动设置一个字符串,然后尝试生成它 step-by-step 并将生成的字符串与手动字符串进行比较,直到适合为止。 (你用点 .
连接两个字符串)
- 您可以配置 glob 函数,使其仅查找某些文件类型 (
*.pdf
)。
我有一个名为 PDFS 的主目录,它有 5 个代表年份的子目录(2011、2012、2013、2014、2015)。在每个 "year directory" 中有 11 个 pdf。我需要访问 PDFS 目录并获取所有 "year directories",然后获取每个 "year directory" 中的所有 pdf 以显示在页面上。因此,例如 2011 "year directory" 中的 pdf 将列在 2011 标题下。与 2012 年、2013 年等相同。我尝试了很多不同的东西。我可以使用 scandir() 输出 "year directories"。我可以使用 foreach 循环和 glob() 在单个 "year directory" 中输出文件。除了在每个 "year directory" 上使用 glob() 执行多个 foreach 循环外,我这辈子都想不出如何输出每个 "year directory's" 文件。必须有一种更动态的方式来设置它。有什么建议么?我觉得我需要在 foreach 中使用某种 foreach?这是我正在处理的内容:
//set main directory
$dir = 'PDFS';
//gets sub directories of PDFS directory
$directories = scandir($dir);
//removes the first to indexes in the directories array that are just dots
unset($directories[0]);
unset($directories[1]);
//outputs an array of the sub directories from scandir() starting at index 2
print_r($directories);
//initialize $i variable for loop
$i=0;
//if I manually set the $dir variable to "PDFS/2011/*" this will output links
//to each pdf inside the 2011 year directory
foreach(glob($dir) as $file) {
$i++;
echo "<a href='$file'>$file</a><br />";
}
您走对了,这段代码应该可以解决问题:
//set main directory
$mainDir = 'PDFS';
//gets sub directories of PDFS directory
$subDirectories = scandir($mainDir);
//removes the first two indexes in the directories array that are just dots
unset($subDirectories[0]);
unset($subDirectories[1]);
// first loop through all sub directories ...
foreach($subDirectories as $subDirectory) {
echo '<h1>'.$subDirectory.'</h1>';
// ... and then loop through all files in each sub directory
foreach(glob($mainDir.'/'.$subDirectory.'/*') as $file) {
echo "<a href='$file'>$file</a><br />";
}
}
为了更好地理解,我更改了一些 var 名称。
几件事:
不需要计数变量
i
因为你使用了 foreach。如果您手动设置一个字符串,然后尝试生成它 step-by-step 并将生成的字符串与手动字符串进行比较,直到适合为止。 (你用点
.
连接两个字符串)- 您可以配置 glob 函数,使其仅查找某些文件类型 (
*.pdf
)。