从每个子目录返回第一个文件

时间:2011-03-15 21:59:48

标签: php

我设法创建了一个扫描目录和子目录的函数,然后将它们合并到一个数组中。

我可以很好地输出这个,但我真正想要的是它只输出子目录中的第一个文件

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." />";
}

3 个答案:

答案 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);
}

这个解决方案确实有一些开销。如果你真的需要它,你可以在以后摆脱它。如果你开始逐步思考一个问题,你会发现不仅你的任务会变得更容易。此外,您的代码将更易于维护。