我有一个带有“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>";
}
答案 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
与该模式不匹配,但未显示在列表中。