2014-11-09 2 views
-1

Итак, я создал скрипт на PHP, который устанавливает приветствие в зависимости от даты и времени. Код проверяет любые сезонные события, и если их нет, он проверяет время и назначает соответствующее приветствие. Мой вопрос, который у меня есть:Рандомизированная функция приветствия - PHP

Я установил значение, чтобы проверить, прошло ли время 18:00, если оно прошло, оно должно установить вечернее приветствие. Моя проблема заключается в том, что если я изменю значение аргумента php if в какое-то время в будущем, он все равно сохранит приветствие в качестве вечернего приветствия. Что может быть неправильным?

Вот мой код:

$morningGreetings = array(
    1 => "Good morning", 
    2 => "Morning", 
); 

$standardGreetings = array(
    1 => "Hello", 
    2 => "Howdy", 
    3 => "Hiya", 
    4 => "Greetings", 
    5 => "Great to see you", 
    6 => "Hi there", 
    7 => "Hi", 
    8 => "Good day", 
); 

$eveningGreetings = array(
    1 => "Evening", 
    2 => "Good evening", 
); 

$seasonalGreetings = array( 
    1 => "Merry Christmas", 
    2 => "Happy New Year", 
); 

$eventGreetings = array(
    1 => "Happy Birthday", 
); 

if (date("d m") != strtotime("25 12")) { 

    if (date("d m") != strtotime("0 0")) { 

     if (date("G i") <= strtotime("18 00")) { 

      if (date("G i") <= strtotime("09 00")) { 

       $sizeOfArray = sizeof($standardGreetings); 

       $greetingValue = rand(1, $sizeOfArray); 

       $greeting = $standardGreetings[$greetingValue]; 

      } else { 

       $sizeOfArray = sizeof($morningGreetings); 

       $greetingValue = rand(1, $sizeOfArray); 

       $greeting = $morningGreetings[$greetingValue]; 

      } 

     } else { 

      $sizeOfArray = sizeof($eveningGreetings); 

      $greetingValue = rand(1, $sizeOfArray); 

      $greeting = $eveningGreetings[$greetingValue]; 

     } 

    } else { 

     $greeting = $seasonalGreetings[2]; 

    } 

} else { 

    $greeting = $seasonalGreetings[1]; 

} 
+0

"значение аргумента в то время в будущем" --- как именно Вы делаете это? Это не очевидно из вашего кода. И что такое 'strtotime (« 18 00 »)'? – zerkms

+0

Аргумент 'if (date ("G i") <= strtotime ("18 00"))' проверяет, находится ли текущее время до 18:00 (18:00) –

+1

'strtotime (" 18 00 ")' не работает как вы предполагаете. Не уверен, откуда у вас этот странный синтаксис. – zerkms

ответ

2

Может быть что-то вроде этого:

EDIT

$seasonalGreetingA=array(); 
$seasonalGreetingA[]=array('dayBegin'=>30,'monthBegin'=>12,'dayEnd'=>31,'monthEnd'=>12,'text'=>'Happy New Year'); 
$seasonalGreetingA[]=array('dayBegin'=>1,'monthBegin'=>1,'dayEnd'=>2,'monthEnd'=>1,'text'=>'Happy New Year'); 
$seasonalGreetingA[]=array('dayBegin'=>21,'monthBegin'=>6,'dayEnd'=>23,'monthEnd'=>9,'text'=>'Happy Spring'); 
$seasonalGreetingA[]=array('dayBegin'=>12,'monthBegin'=>11,'dayEnd'=>23,'monthEnd'=>11,'text'=>'Happy All'); 

$dateGreetingA=array(); 
$dateGreetingA[]=array('date'=>'2014-11-09','text'=>'Happy Birthday'); 

$timeGreetingA=array(); 
$timeGreetingA[]=array('timeBegin'=>8,'timeEnd'=>12,'text'=>'Morning'); 
$timeGreetingA[]=array('timeBegin'=>8,'timeEnd'=>12,'text'=>'Good morning'); 
$timeGreetingA[]=array('timeBegin'=>18,'timeEnd'=>23,'text'=>'Evening'); 
$timeGreetingA[]=array('timeBegin'=>18,'timeEnd'=>23,'text'=>'Good evening'); 
$timeGreetingA[]=array('timeBegin'=>23,'timeEnd'=>24,'text'=>'Time out'); 
$timeGreetingA[]=array('timeBegin'=>13,'timeEnd'=>18,'text'=>'Good afternoon'); 

$standardGreetingA[]=array(); 
$standardGreetingA[]=array('text'=>'Hello'); 
$standardGreetingA[]=array('text'=>'Howdy'); 
$standardGreetingA[]=array('text'=>'Hi'); 

$txtGreeting=''; 

$date=date('Y-m-d'); 
if($txtGreeting=='') 
if(count($dateGreetingA)>0) 
    foreach($dateGreetingA as $dgA) 
    { 
     if($dgA['date']==$date) 
     { 
      $txtGreeting=$dgA['text']; 
      break; 
     } 
    } 

$d=(int)date('d'); 
$m=(int)date('m'); 
if($txtGreeting=='') 
if(count($seasonalGreetingA)>0) 
    foreach($seasonalGreetingA as $sgA) 
    { 
     $d1=$sgA['dayBegin']; 
     $m1=$sgA['monthBegin']; 

     $d2=$sgA['dayEnd']; 
     $m2=$sgA['monthEnd']; 

     //echo $m1.' >= '.$m.' <= '.$m2.'<br />'; 
     if($m>=$m1 and $m<=$m2) 
      if($d>=$d1 and $d<=$d2) 
       $txtGreeting=$sgA['text']; 

    }  

$time=(int)date('H'); 
if($txtGreeting=='') 
if(count($timeGreetingA)>0) 
    foreach($timeGreetingA as $tgA) 
    {   
     if($time>=$tgA['timeBegin'] and $time<= $tgA['timeEnd']) 
     {    
      $txtGreeting=$tgA['text']; 
      break; 
     } 
    } 

if($txtGreeting=='') 
    if(count($standardGreetingA)>0) 
    { 
     $ind=rand(0,count($standardGreetingA)-1); 
     if(isset($standardGreetingA[$ind])) $txtGreeting=$standardGreetingA[$ind]['text']; 
    } 

echo $txtGreeting; 
exit; 
+0

Работает отлично, хотя он не выбирает случайное приветствие. –

+0

Возможно, я не понимаю, но $ standardGreetingA появляется только 00-08 и 12-18 для данных в $ timeGreetingA – dm4web

Смежные вопросы