【问题标题】:php--glob for searching directories and .jpg onlyphp--glob 仅用于搜索目录和 .jpg
【发布时间】:2012-04-03 01:40:44
【问题描述】:

如果我只想搜索子目录和某些文件类型怎么办。 前任。我有一个名为“stuff”的文件夹,其中上传了随机的东西。假设我只想在“stuff”中搜索子文件夹和 .jpg 文件,仅此而已。我知道只搜索 .jpg 是……

$array = glob(‘stuff/{*.jpg}’, GLOB_BRACE);

并且只搜索子目录是……

$array = glob(‘stuff/*’, GLOB_ONLYDIR);

...但是如何在不获取任何其他不需要的文件的情况下将两者结合起来呢? GLOB_BRACE 的子目录有模式吗?

【问题讨论】:

    标签: php file glob


    【解决方案1】:

    这个递归函数应该可以解决问题:

    function recursiveGlob($dir, $ext) {
        $globFiles = glob("$dir/*.$ext");
        $globDirs  = glob("$dir/*", GLOB_ONLYDIR);
    
        foreach ($globDirs as $dir) {
            recursiveGlob($dir, $ext);
        }
    
        foreach ($globFiles as $file) {
            print "$file\n"; // Replace '\n' with '<br />' if outputting to browser
        }
    }
    

    用法:recursiveGlob('C:\Some\Dir', 'jpg');

    如果您希望它对单个文件执行其他操作,只需替换 print "$file\n" 部分。

    该函数在其glob 搜索中可以更具体,并且仅匹配目录以及具有指定文件扩展名的文件,但我这样做是为了简单和透明。

    【讨论】:

    • 我回去测试了这个功能,发现它不起作用。我纠正了错误并优化了它。我希望你收到这个通知 :-)
    【解决方案2】:

    我不确定我是否完全遵循,因为其中一个您正在寻找特定的文件类型,而另一个您正在寻找子目录。这些是完全不同的模式!

    话虽如此,让一个数组包含stuff/ 中的所有 *.jpg 文件以及stuff/ 中的子目录的方法是让您的代码更进一步:

    $jpg_array = glob('stuff/{*.jpg}', GLOB_BRACE);
    $subdir_array = glob('stuff/*', GLOB_ONLYDIR);
    
    // Combine arrays
    $items = array_merge($jpg_array,$subdir_array);
    
    // Do something with values
    foreach($items as $item)
    { 
       echo($item . "<br>");
    }
    

    【讨论】:

    • 感谢您的解决方案。简单而聪明。
    • @Luchis 如果此解决方案解决了您的问题,请接受此答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2014-06-02
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多