我的网站将用于每天在酒店和公园预订日光躺椅。通常,躺椅每天的默认价格,但有时会有一个高峰率(例如假日季节或周末)。所以我有一张桌子
special_prices
--------
start_date
end_date
price
我有一个搜索/计算器功能,允许用户输入他们想租用躺椅的开始日期和结束日期,计算器计算总价格,包括特价。
每个躺椅都有它自己的记录,所以我将所有的special_price记录与一个阵列中的特定躺椅相关联,我想我应该遍历每个记录,如果用户输入的天数介于special_price记录的日期之间那么我不知何故需要计算需要增加多少天数。
我很难解决这个问题,因为我是php的新手,并且真的只是为了学习体验而这样做。我现在已经摆弄了太长时间了:(
答案 0 :(得分: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;