2012-01-26 4 views
0

Я немного новичок в PHP, поэтому моя работа над сценарием продолжается. У меня есть страница, на которой пользователи регистрируются на семинаре, за который они должны платить. Если они регистрируются до 5 дней до проведения семинара, они получают скидку, если они регистрируются через 5 дней до проведения семинара, они должны платить полную цену. Я написал PHP-скрипт, который, я думаю, сделает это (все равно работает тестирование), но у меня есть ощущение, что есть лучший способ его написать. Я просто ищу любые предложения, которые есть у кого-либо, если они есть. Ваша помощь очень ценится. Мой сценарий выглядит следующим образом.Сценарий для датированной скидки

date_default_timezone_set('MST'); 
$discount_check = date("YmdHis", mktime(date("H"), date("i"), date("s"), date("m") , date("d")+5 , date("Y"))); 

//Made an array because there are several seminars a year and because I need to make it easy enough for others in my office (who don't know PHP) to add/edit seminar dates 
$array = array(
'Utah_seminar' => '20120130153804', 
'Seattle_seminar' => '20120723000000', 
'Florida_seminar' => '20121005000000' 
); 

while ($seminar_dates = current($array)) 
{ 
    if ($discount_check >= $seminar_dates) 
    { 
     echo 'discount is not eligible'; 
     break; 
    } 
    else 
    { 
     echo 'discount received'; 
     break; 
    } 
next($array); 
} 

С другой стороны, любая помощь очень ценится. Даже если он найдет какие-либо икоты с кодом.

ответ

2
<? 
date_default_timezone_set('MST'); 

$now = new DateTime(); 

// Made an array because there are several seminars a year and because I need 
// to make it easy enough for others in my office (who don't know PHP) to 
// add/edit seminar dates 
$array = array(
    'Utah_seminar' => new DateTime('2012-01-30 15:38:04'), 
    'Seattle_seminar' => new DateTime('2012-07-23 00:00:00'), 
    'Florida_seminar' => new DateTime('2012-10-05 00:00:00') 
); 

foreach ($array as $seminar => $date) { 
    $cutoff = clone $date; 
    $cutoff->modify('-5 days'); 

    if ($now > $cutoff) { 
     echo "$seminar - discount is not eligible\n"; 
    } else { 
     echo "$seminar - discount received\n"; 
    } 
} 
?> 
+0

Может также возникнуть идея поместить количество дней в переменную в случае изменения конкретной сделки? – Hecksa

+0

Большое вам спасибо за ваш ответ. Я не уверен, понимаю ли я все это, но сейчас я ищу, чтобы понять, не могу ли я это понять. Несмотря ни на что, я действительно ценю это. –

0

Поскольку вы используете break, ваш цикл будет работать только один раз. Если я понимаю, что вы пытаетесь сделать, вы должны использовать:

$eligable = false; 
foreach ($array as $seminar_date) { 
    if ($discount_check < $seminar_date) { 
    $eligable = true; 
    break; 
    } 
} 

if ($eligable) { 
    echo 'discount received'; 
} else { 
    echo 'discount is not eligible'; 
} 

Я изменил цикл while к foreach, как я думаю, что они более тривиальным, чтобы понять

+0

Большое вам спасибо за ваш ответ. Я должен был быть более ясным в моем вопросе, и это было то, что я, вероятно, удалю дату, когда она пройдет из массива. Я думаю, что это просто природа зверя. Я очень ценю ваш ответ и не тороплюсь. –

0

В зависимости от того, что «Я смотрю, как сделать с массивом, который я бы рекомендовал для сортировки, а затем для определения первого применимого индекса.

$discount_check = mktime(date()); 
//Sort array in reverse order 
arsort($array); 
for($i = 0; $i < count($array);$i++){ 
    //If array value meets the discount criteria, 
    if($array[$i] <= $discount_check - 432000){ 
    //The index of the first array item to match the discount criteria, since array is sorted all subsquent are applicable 
     $split = $i; 
     $i = count($i); 
    } 
} 
Смежные вопросы