64

这是我当前的代码:

$files = glob("*.jpg");

这工作正常。但是,我想列出其他图像类型,例如 .png、gif 等。

我可以请一些帮助来修改上面的代码以使其正常工作。我尝试了以下但没有成功:

$files = glob("*.jpg","*.png","*.gif");

$files = glob("*.jpg,*.png,*.gif);

和其他变体...

4

5 回答 5

145
$files = glob("*.{jpg,png,gif}", GLOB_BRACE);
于 2012-05-14T21:48:09.873 回答
1

我的两分钱:

$availableImageFormats = [
"png",
"jpg",
"jpeg",
"gif"];
$searchDir = /*yourDir*/;
$imageExtensions = "{";
foreach ($availableImageFormats as $extension) {
    $extensionChars = str_split($extension);
    $rgxPartial = null;
    foreach ($extensionChars as $char) {
        $rgxPartial .= "[".strtoupper($char).strtolower($char)."]";
    }
    $rgxPartial .= ",";
    $imageExtensions .= $rgxPartial;
};
$imageExtensions .= "}";
glob($searchDir."/*.".$imageExtensions, GLOB_BRACE)

有了这个,您可以创建一个包含您正在寻找的所有扩展的数组,而不必担心不正确的案例使用。希望能帮助到你

于 2017-07-13T18:05:42.930 回答
1

05 2021

这只是@Jeroen 答案的扩展。

要记住的事情

“标志”很重要

由于您使用的是大括号,因此请记住GLOB_BRACE必需。如果没有标志,您将得到一个空数组 if items

$files = glob("*.{jpg,png,gif}", GLOB_BRACE);

排序

这也将帮助您以您编写的方式对文件进行排序。

$files = glob("*.{jpg,png,gif}", GLOB_BRACE);
xx.jpg
xx.jpg
xx.png
xx.gif
xx.gif

$files = glob("*.{gif,jpg,png}", GLOB_BRACE);
xx.gif
xx.gif
xx.jpg
xx.jpg
xx.png

+奖金

如果你必须列出所有文件但没有文件夹,你可以使用这个

$files = glob("*.{*}", GLOB_BRACE);
于 2021-05-07T04:40:55.690 回答
0

我只是需要这个用于我自己的项目。我做了一个从数组到字符串的转换器。

function whitelistToBrace($whitelist) {
  $str = "{";
  $whitelist = !empty($whitelist) ? $whitelist : ['*'];

  foreach($whitelist as $extension) {
    $str .= '*.' . strtolower($extension) . ',';
  };

  $str = substr($str, 0, -1) . '}';

  return $str;
}

用法

$whitelist = [
  'png',
  'jpg'
];

// glob('my/path/*.{*.png,*.jpg}', GLOB_BRACE);
$glob = glob('my/path/' . whitelistToBrace($whitelist), GLOB_BRACE);
print_r($glob);
于 2019-08-21T06:38:52.663 回答
0

我找到了一个比使用 GLOB_BRACE 更简单的解决方案,它不区分大小写:

$files = array_filter(glob('path/*.*'), function ($filename) { return preg_match('/\.(jpe?g|png|gif)$/i', $filename); });
sort($files);

或者你可以简单地这样做:

$files = preg_grep('/\.(jpe?g|png|gif)$/i', glob('path/*.*'));
sort($files);

只是我的两分钱,希望它对最终来到这里的人有所帮助。

于 2020-06-24T00:40:16.670 回答