有没有办法在使用时只获取带有扩展名、等jpeg
的png
图像gif
$dir = '/tmp';
$files1 = scandir($dir);
有没有办法在使用时只获取带有扩展名、等jpeg
的png
图像gif
$dir = '/tmp';
$files1 = scandir($dir);
您可以使用glob
$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
如果您需要它不区分大小写,则可以将 aDirectoryIterator
与 a 结合使用RegexIterator
或将结果传递给scandir
toarray_map
并使用过滤任何不需要的扩展名的回调。是否使用strpos
,fnmatch
或pathinfo
获取扩展名取决于您。
实际问题是使用 scandir ,答案最终出现在 glob 中。两者之间存在巨大差异,其中 blob 相当重。可以使用以下代码对 scandir 进行相同的过滤:
$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
我希望这会对某人有所帮助。
这是一种仅获取图像的简单方法。适用于PHP >= 5.2版本。扩展名的集合是小写的,因此将循环中的文件扩展名设置为小写使其不区分大小写。
// image extensions
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp');
// init result
$result = array();
// directory to scan
$directory = new DirectoryIterator('/dir/to/scan/');
// iterate
foreach ($directory as $fileinfo) {
// must be a file
if ($fileinfo->isFile()) {
// file extension
$extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION));
// check if extension match
if (in_array($extension, $extensions)) {
// add to result
$result[] = $fileinfo->getFilename();
}
}
}
// print result
print_r($result);
如果您想要不区分大小写且仅图像扩展名,我希望这很有用。
我会遍历文件并查看它们的扩展名:
$dir = '/tmp';
$dh = opendir($dir);
while (false !== ($fileName = readdir($dh))) {
$ext = substr($fileName, strrpos($fileName, '.') + 1);
if(in_array($ext, array("jpg","jpeg","png","gif")))
$files1[] = $fileName;
}
closedir($dh);
您可以随后搜索结果数组并丢弃不符合您的条件的文件。
scandir
没有您想要的功能。
如果你想扫描一个目录并只返回文件名,你可以使用这个:
$fileNames = array_map(
function($filePath) {
return basename($filePath);
},
glob('./includes/*.{php}', GLOB_BRACE)
);
scandir()
将返回.
和..
以及文件,因此如果您只需要文件名或者您想使用实际文件路径做其他事情,上面的代码会更干净
我编写了代码重用并将上述解决方案的部分组合在一起,以使其更易于理解和使用:
<?php
//put the absolute or relative path to your target directory
$images = scandir("./images");
$output = array();
$filer = '/(.jpg|.png|.jpeg|.gif|.bmp))/';
foreach($images as $image){
if(preg_match($filter, strtolower($image))){
$output[] = $image;
}
}
var_dump($output);