2012-07-05 36 views
0

我就住在我所分配每天不同的廣告的一個項目工作輪換使用不同的數據,該廣告在陣列的形式是:如何在一週的日子在PHP

$ad = array('attribute1_value' => "12", 
'attribute2_value' => "xyz", 
'attribute3_value' => 'http://example.com', 
'attribute4_value' => 'data'); 

邏輯我我使用帶開關的情況下:

$day = date('w',time()); 

    switch ($day) { 
     case '0': 
     if($day == '0') { 
      $count = 0; 
      echo $ad; 
      $count++; 
     } 
     else { 
      $count = 7; 
      echo $ad; 
     } 
     break; 

      case '1': 
     if($day == '1') { 
      $count = 1; 
      echo $ad; 
      $count++; 
     } 
     else { 
      $count = 8; 
      echo $ad; 
     } 
     break; 

問題是,如果我有〜15個廣告的話,我想發佈廣告/天,日期(「W」)輸出的本一天,但第7天,即週六後,週日的廣告8號發起。我必須使用日期函數來實現這個場景。另外,我必須將廣告發送給那些以前沒有體驗過此廣告的用戶。我不擅長php,作爲一個初學者在php/mysql中工作。請幫助我改進此概念

+0

看起來像http://stackoverflow.com/q/11324339/1497460 – jared

回答

2

您當前的代碼存在一些問題。首先,與邏輯:

case '0': //<!-- ensures the following code executes only where $day == 0 
    if($day == '0') { //<!-- therefore this will run 
     $count = 0; 
     echo $ad; 
     $count++; 
    } else { //<!-- but this can never run 
     $count = 7; 
     echo $ad; 
    } 

此外,你echo'ing出$ads,這是一個數組。你需要從數組中回顯出一個元素

如果你想要一個星期一使用廣告1,而下一個星期一使用廣告8,date('w')不會有太大的幫助,因爲它只是循環通過0到6,所以它不適合這個。它沒有記錄月份或年份的整體日數 - 它的範圍僅僅是本週。

您可以改爲使用當月的某一天[編輯 - 或者,當然,一年中的某一天(date('z')))。請參閱下面的評論)。

$day = date('d'); 
$ads = array('ad 1', 'ad 2', 'ad 3', 'ad 4', 'ad 5', 'ad 6', 'ad 7', 'ad 8', 'ad 9', 'ad 10', 'ad 11', 'ad 12'); 
echo $ads[($day - 1) % count($ads)]; 

因此,在本月的第5天,廣告5顯示。第7天,廣告7顯示。廣告2在第14天顯示,因爲它再次圍繞廣告週期開始。

至於如何確保用戶之前沒有看過廣告,這是一個完整的其他問題,我建議您將其發佈。這大概會涉及某種cookie系統,除非用戶登錄,在這種情況下,您可以跟蹤服務器端的這類事情。

+1

重拍我建議使用'日期('z')'(從0到365日),因爲它會提供更多的均勻度(如果你使用'date('d')'並且有20個廣告(如果它們的數量在增加),廣告1-10將每月顯示兩次,而廣告11-20只顯示一次,每個月重複一次。 –

+0

好點 - 編輯提到這一點。 – Utkanos

相關問題