2015-06-22 147 views
1

我有一个MySQL列表“圆”,每个“回合”都有他自己的照片。例子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>"; 
} 
+1

您是否尝试过'preg_match'? –

+0

@CagatayUlubay不,我不知道。我现在正在看它,谢谢。 – BackTrack57

回答

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,不匹配的格局并没有出现在名单上。

+0

它不是regexp的替代品,它使用正则表达式,并且与已经给出的答案几乎相同。 – FeedTheWeb

+0

@已采取指示。我应该删除我的答案吗?无论你想要什么,都可以使用 – vvye

+0

。也许等待一些更多的回应 – FeedTheWeb

1

使用水珠()函数

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

代码的输出类似:

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

因此,对于你的情况可能是这样的:

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