如何使用GLOB_ONLYDIR(php)仅回显现有文件夹

时间:2016-05-11 10:43:28

标签: php

示例:

$dirs = glob('./*', GLOB_ONLYDIR);
echo "<a href='$dirs[0]'>  <img src='$dirs[0]/thumb.jpg'/></a> ";
echo "<a href='$dirs[1]'>  <img src='$dirs[1]/thumb.jpg'/></a> ";

我的问题是有些文件夹只有一个,有些文件夹有2个子文件夹 如何只回显现有文件夹?

谢谢。

修改

所以我想要的是创建一个php文件,从文件放置文件夹中的所有文件夹生成一个库。 但如果我使用上面的回声,例如:

$dirs = glob('./*', GLOB_ONLYDIR);
echo "<a href='$dirs[0]'>  <img src='$dirs[0]/thumb.jpg'/></a> ";
echo "<a href='$dirs[1]'>  <img src='$dirs[1]/thumb.jpg'/></a> ";
echo "<a href='$dirs[2]'>  <img src='$dirs[2]/thumb.jpg'/></a> ";
echo "<a href='$dirs[3]'>  <img src='$dirs[3]/thumb.jpg'/></a> ";
echo "<a href='$dirs[4]'>  <img src='$dirs[4]/thumb.jpg'/></a> ";
echo "<a href='$dirs[5]'>  <img src='$dirs[5]/thumb.jpg'/></a> ";

并且文件夹里面只有3个文件夹比我有3个空拇指。因为 $ dirs [3]及以上不存在。 :(

1 个答案:

答案 0 :(得分:0)

您需要一个递归函数才能获得超过1级目录。您可以尝试以下方式:

function glob_recursive($pattern, $flags = 0)
{
    $files = glob($pattern, $flags);

    foreach (glob(dirname($pattern).'/*', GLOB_ONLYDIR) as $dir)
    {
        $files = array_merge($files, glob_recursive($dir.'/'.basename($pattern), $flags));
    }

    return $files;
}

print_r(glob_recursive('/var/www/*',GLOB_ONLYDIR));  

此示例仅打印/var/www文件夹下的目录。要非常小心性能,如果目录结构太大,可能会很慢。

方法的original source

修改

我认为你想要的是将数组放在一个foreach循环中,这样你就不会得到空的缩略图:

$dirs = glob('./*', GLOB_ONLYDIR);
foreach ($dirs as $index=>$dir){
  echo "<a href='$dirs[$index]'>  <img src='$dirs[$index]/thumb.jpg'/></a> ";
}

希望这会对你有所帮助。