2013-07-18 56 views
0

我的網站將是在酒店和公園每天預訂躺椅的天數。通常,躺椅的價格是每天的默認價格,但有時會有一個高峯價格(例如假日季節或週末)。所以我有一個表PHP - 計算可有一個特殊的價格

special_prices 
-------- 
start_date 
end_date 
price 

而且我有一個搜索/計算器功能,它允許用戶輸入的時候,他們想租躺椅的開始日期和結束日期和計算器計算出包括總價特價。

每個躺椅都有自己的記錄,所以我將所有special_price記錄與數組中的特定躺椅相關聯,並且我想我應該遍歷每個這些記錄,並且如果用戶輸入的天數落在special_price記錄的日期那麼我需要計算需要增加數量的天數。

我無法搞清楚了這一點,因爲我是新來的PHP和真的只是這樣的學習經驗。我一直在擺弄它太長時間,現在雖然:(

回答

0

這個問題通常是由SQL Stored Procedures解決,但既然你已被標籤爲PHP你的問題,這裏是一個PHP的答案:

// Let's imagine that $db is a PDO instance 

// fetch all special prices 
$stmt = $db->query('SELECT * FROM `special_prices`;'); 
$specialPrices = $stmt->fetchAll(PDO::FETCH_ASSOC); 

// init datetime objects 
$startDate = new \DateTime('16.05.2013'); 
$endDate = new \DateTime('08.06.2013'); 
$currentDate = clone $startDate; 

// set default price and init result price (set it to 0) 
$defaultPrice = 10; 
$resultPrice = 0; 

while ($currentDate <= $endDate) 
{ 
    // init price the will be added to teh result as a default one 
    $addPrice = $defaultPrice; 

    foreach ($specialPrices as $specialPrice) 
    { 
     // temp special price DateTime objects to compare them with the current date 
     $specialPriceStartDate = new \DateTime($specialPrice['start_date']); 
     $specialPriceEndDate = new \DateTime($specialPrice['end_date']); 

     if ($currentDate >= $specialPriceStartDate && $currentDate <= $specialPriceEndDate) 
     { 
      // If one of special dates matches with the current date, set its price as $addPrice 
      $addPrice = $specialPrice['price']; 
      break; 
     } 
    } 

    // add price (default or special as calculated before) to the result 
    $resultPrice += $addPrice; 

    // get the next day 
    $currentDate->modify('+1 day'); 
} 

// here is the result 
echo $resultPrice;