2012-08-22 62 views
0

我在一天的腳本圖片中生成並顯示圖片。我有一張當天圖片的畫廊頁面(從一個目錄中拉出來)。所以我想從目錄中提取所有文件,當它到達當前日期時(這與文件名IE相同,20120822.jpg是今天顯示的內容,20120823.jpg是明天顯示的內容)。我讓它循環所有目錄圖像並在畫廊中顯示它們,但我希望循環在當前日期後停止,以便我們不顯示或加載未來的圖像。這裏是我的代碼。我敢肯定,我只是在做一些愚蠢的..顯示文本後的Foreach循環停止

<?PHP 
    // filetypes to display 
     $imagetypes = array("image/jpeg", "image/gif"); 
?> 
<?PHP 

    function getImages($dir) 
    { 
    global $imagetypes; 

    // array to hold return value 
    $retval = array(); 

    // add trailing slash if missing 
    if(substr($dir, -1) != "/") $dir .= "/"; 

    // full server path to directory 
    $fulldir = "{$_SERVER['DOCUMENT_ROOT']}/$dir"; 

    $d = @dir($fulldir) or die("getImages: Failed opening directory $dir for reading"); 
    while(false !== ($entry = $d->read())) { 
     // skip hidden files 
     if($entry[0] == ".") continue; 

     // check for image files 
     $f = escapeshellarg("$fulldir$entry"); 
     $mimetype = trim(`file -bi $f`); 
     foreach($imagetypes as $valid_type) { 
     if(preg_match("@^{$valid_type}@", $mimetype)) { 
      $retval[] = array(
      'file' => "/$dir$entry", 
      'size' => getimagesize("$fulldir$entry") 
      ); 
      break; 
     } 
     } 
    } 
    $d->close(); 

    return $retval; 
    } 
?> 

<?PHP 
    // fetch image details 
    $images = getImages("galleries/photo-of-the-day/images"); 
$today = date("Ymd") . ".jpg"; 

    // display on page 
    sort($images, SORT_REGULAR); 
    foreach($images as $img) { 
if ($img == "20120822.jpg") { 
    break; 
    } else { 
?> 


<div style="margin-right: 10px; float: left; margin-bottom: 10px; padding-bottom: 10px; border: 1px #CCCCCC solid;"> 

<a href="<? echo $img['file']; ?>" rel="prettyPhoto" title=""> 

<img class="image-gals" src="<? echo $img['file']; ?>" style="width: 260px; margin-bottom: 0px;padding: 10px; " /></a> 

<a href="<? echo $img['file']; ?>" style="font-size: 10px; padding: 3px 10px 10px 10px;">Download</a> 

</div> 
<? 
} 
} 
?> 
+1

那麼當你運行代碼時發生了什麼?它沒有顯示任何圖像?所有的圖像?就在今天? – andrewsi

+0

在foreach循環之後,只需在今天的日期檢查文件名。如果它們匹配,只需添加一個'break;'語句來停止while循環。 –

+0

'break'通常適合我,當我想擺脫一個循環時。 – Matt

回答

0

這是你填充你的$images陣列:

$retval[] = array(
    'file' => "/$dir$entry", 
    'size' => getimagesize("$fulldir$entry") 
); 

但是當你對它們進行比較,你這樣做:

foreach($images as $img) { 
    if ($img == "20120822.jpg") { 

$img將包含一個數組。您需要檢查$img['file'],並且該目錄中還包含目錄名稱,因此它不會僅匹配圖像名稱。