2014-01-07 3 views
1

У меня есть xml для меню ресторана.логики должны быть созданы для чтения xml

<RestuarantMenu> 
<Day name="Monday"> 
    <options startTime="10:00">This is first link monday</options> 
    <options startTime="14:00">This is second link monday</options> 
    <options startTime="20:00">This is third link monday</options> 
</Day> 

<Day name="Tuesday"> 
    <options startTime="10:00">This is first link</options> 
    <options startTime="14:00">This is second link</options> 
    <options startTime="20:00">This is third link</options> 
</Day> 
<RestuarantMenu> 

Теперь я хочу, если текущий день понедельник и время между 10:00 и 14:00, вне должно быть «это первая ссылка понедельник» (первый вариант). Точно так же, если текущее время даже жаднее 20:00 и меньше 10:00, оно должно показать last option. (ужин меню до завтра утром 10:00).

Вот мой код PHP.

echo $t=date('d-m-Y H:i:s'); echo '<br>'; 
echo $day = date("D",strtotime($t)); echo '<br>'; 
echo $time = date("H:i",strtotime($t)); echo '<br>'; 

$xml=simplexml_load_file("menu.xml"); 

foreach($xml->Day as $Day) 
{ 
    if($Day->attributes() == 'Monday') 
    { 
    foreach($Day->options as $options) 
    { 
     if($options->attributes() < $time) 
     { 
      echo $options; echo '<br>'; 
     } 

    } 
    } 
    } 

На данный момент это просто найти время варианта меньше, чем текущее время, но не между ними и т.д.

Сейчас условием $options->attributes() < $time дает мне такую ​​возможность, чье время меньше, чем текущее время. Но если текущее время составляет 15:00, это даст мне два варианта на выходе 10:00 и 14:00, но мне нужен тот, который составляет 14:00. Если мой вопрос непонятен, любезно спросите меня. Благодаря

+0

Вам просто нужно следить дня и времени и создать объект даты. Вы вообще не делаете условной логики: S – FaddishWorm

+0

Можете ли вы уточнить, что ваш вопрос? Где вы застряли? –

+0

@Pekka 웃, прямо сейчас условие '$ options-> attributes() <$ time' дает мне эту опцию, время которой меньше текущего времени. Но если текущее время составляет 15:00, это даст мне два варианта в выводе '10:00 и 14: 00', но мне нужен тот, который равен' 14: 00'. Надеюсь, это ясно. –

ответ

1

Попробуйте это:

$xml = simplexml_load_string($x); // assume XML in $x 
$day = "Tuesday"; 
$time="09:50"; 

// select <option> by $day and $time 
$results = $xml->xpath("/*/Day[@name = '$day']/options[translate(@startTime, ':', '') <= translate('$time',':', '')]"); 

$result = array_pop($results); // get last element 
if (is_null($result)) $result = "the restaurant is closed!"; // if $time is smaller than any startTime 

echo "$day, $time... $result"; 

видеть, что это работает: https://eval.in/86906

важное примечание: Это работает только если startTime -attributes в порядке возрастания.

xpath -expression подберет все <option> с startTime < = $time и хранить их в array $results, array_pop() занимает последний элемент в массиве и делает его $result. Если $time является < startTime, $result = NULL

времени значений сравниваются как числа, то translate -функции изменит 12:00 к 1200 и 14:23 к 1423, так 1200 < 1423 = true

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