我设法创建了一个扫描目录和子目录的函数,然后将它们合并到一个数组中。
我可以很好地输出这个,但我真正想要的是它只输出子目录中的第一个文件
function getFiles($directory) {
if($dir = opendir($directory)) {
$tmp = Array();
while($file = readdir($dir)) {
if($file != "." && $file != ".." && $file[0] != '.') {
if(is_dir($directory . "/" . $file)) {
$tmp2 = getFiles($directory . "/" . $file);
if(is_array($tmp2)) {
$tmp = array_merge($tmp, $tmp2);
}
} else {
array_push($tmp, $directory . "/" . $file);
}
}
}
closedir($dir);
return $tmp;
}
}
$theFiles = getFiles($_SERVER['DOCUMENT_ROOT']."/images/gallery");
sort($theFiles);
foreach ($theFiles as $v){
echo "<img src=".$v." />";
}
答案 0 :(得分:1)
你可以放
continue;
调用array_push()后。
} else {
array_push($tmp, $directory . "/" . $file);
continue;
}
答案 1 :(得分:0)
您可以使用dirname获取文件的目录 - 输出文件(这将是第一个) - 并将其保存到变量中。只要此变量不变,意味着您仍在目录中。
当它改变时,显示文件(到达新目录)并更新变量。
答案 2 :(得分:0)
好吧,分而治之。您发布的代码显示您很聪明且经验丰富,可以自行解决。你遇到的问题仅仅是复杂性。因此,如果你只想在一个额外的功能中完成你想要做的每一步,你应该自己轻松解决它。这样做的例子非常不必要,但无论如何我想给你一个。我现在不是坐在支持PHP的电脑上,所以我无法测试我的例子。我希望它能够起作用,或者至少明确地表明我的意思是你可以自己调试它。
/**
* goes through all entries in this folder and extracts the directories.
*/
function getFolders($directory){
if($dir = opendir($directory)) {
$arr - Array();
while($file = readdir($dir)){
if($file != "." && $file != ".." && $file[0] != '.' && is_dir($dir.'/'.$file)) {
$arr[] = $file;
}
}
closedir($dir);
return $arr;
}
}
/**
* goes through a list of folders and takes out every first nonfolder
*/
function getFirstFile($arr) {
$files = Array();
foreach($arr as $directory){
$dir = opendir($directory);
$file = 0;
while($file == '.' || $file == '..' || $file[0] == '.' || is_dir($file){
$file - readdir($dir);
}
$files[] - $file;
}
return $files;
}
function renderFiles($files);
foreach($files as $file) echo '<img src='.$file.'/>';
}
/**
* puts all together
*/
function getFiles($directory){
renderFiles(
getFirstFile(
getFolders($directory);
}
这个解决方案确实有一些开销。如果你真的需要它,你可以在以后摆脱它。如果你开始逐步思考一个问题,你会发现不仅你的任务会变得更容易。此外,您的代码将更易于维护。