如何在文件夹中按名称搜索图像?

时间:2015-06-22 07:14:55

标签: php mysql image

我有一个带有“rounds”列的MySQL表,每个“rounds”都有自己的照片。例子round1有来自start = 380 end = 385的照片。这意味着它有6张照片,照片名称中包含380,381,382,383,384或385。

我使用此PHP代码显示整个文件夹中的照片:

$dirname = "photos";
$images = scandir($dirname);
sort($images,SORT_NUMERIC);
krsort($images);
$ignore = Array(".", "..");

foreach($images as $curimg){
    if(!in_array($curimg, $ignore)) {

        echo "<p align=\"center\">Photo $curimg</p>";
        echo "<img class=\"img-responsive\" src=\"". $dirname . '/' . $curimg ."\">";
    }
}

我需要一些帮助来调整我的代码,因为它只搜索其名称为380,381,382,383,384或385的文件夹中的照片。

我认为下面的代码可以做到,但我不知道如何使用第一个代码进行调整。

$start=380;
$end=385;

for($i=$start; $i<=$end; $i++) {
echo "$i<br>";
}

2 个答案:

答案 0 :(得分:1)

使用glob()函数

 <?php
print_r(glob("*.txt"));
?

上面代码的输出可能是:

Array
(
[0] => target.txt
[1] => source.txt
[2] => test.txt
[3] => test2.txt
) 

所以对于你的情况,它可能是这样的:

$files= glob("38[0-5].jpg");

答案 1 :(得分:1)

这看起来像glob的作业,它返回与指定模式匹配的文件名数组。我知道刚发布的另一个答案,但让我们提供一个替代正则表达式。

根据文档页面上的热门评论,你可以做的是这样的:

<?php
    $dirname = "photos";
    $filenames = glob("$dirname/*{380,381,382,383,384,385}*", GLOB_BRACE);

    foreach ($filenames as $filename)
    {
        echo $filename . "<br />";
    }
?>

GLOB_BRACE选项允许您在大括号中指定值列表,并且它们周围的星号允许这些数字出现在文件名中的任何位置。然后,您可以遍历返回的数组,并使用$filename执行任何操作。

您可以使用示例for循环自动构建一个字符串以传递给glob

这是我在我做的测试目录上运行它时的输出:

photos/380.zip
photos/asdf382ghj.txt
photos/385.bmp

请注意,我放入的另一个文件a386b.xlsx与该模式不匹配,但未显示在列表中。