【问题标题】:How to search images by name inside a folder?如何在文件夹中按名称搜索图像?
【发布时间】:2015-09-07 13:17:03
【问题描述】:

我有一个 MySQL 表,其中有一列“rounds”,每个“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>";
}

【问题讨论】:

  • 你试过preg_match吗?
  • @CagatayUlubay 不,我不知道。我正在看,谢谢。

标签: php mysql image


【解决方案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 与模式不匹配,也没有出现在列表中。

【讨论】:

  • 这不是正则表达式的替代品,它使用正则表达式,并且与已经给出的答案几乎相同。
  • 随心所欲。也许等待更多回应
  • 我接受了您的回答,因为我发现它比另一个更容易理解且更准确。谢谢你们!
【解决方案2】:

使用 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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多