我有餐馆菜单的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点)。
这是我的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 :(得分: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
- 属性按升序排列时,此方法才有效。
xpath
- 表达式将选择<option>
&lt; = startTime
的所有$time
并将其存储在array $results
中,array_pop()
数组中的最后一个元素并使其成为$result
。
如果$time
是&lt; startTime
,$result = NULL
将时间值作为数字进行比较,translate
- 函数将12:00
更改为1200
而14:23
更改为1423
,因此{{1 }}&LT; 1200
= 1423