2015-06-22 149 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"); 
相關問題