返回到另一个XML/PHP问题。:(
在我的网页上,我想显示过去X天内提供的工具的名称。X是用户将在文本框中输入的数字,单击提交按钮后,将显示在过去X天内提供的工具的名称。
这将通过将用户输入的X值与我的XML文件中的日期进行比较来完成,并找到匹配的工具。
在我的XML文件中;日期输入";存储我输入的随机日期的节点:
<tools>
<tool type="..." web-based="..." free="...">
<name>Facebook</name>
<description>...</description>
<url>...</url>
<subjects>...</subjects>
<creators>...</creators>
<category>...</category>
<price>...</price>
<dateentered>2020-12-01</dateentered>
</tool>
</tools>
接下来,我在PHP中创建了一个函数,通过从您输入的日期中减去当前日期,基本上将"Y-M-D"格式转换为天:
function time2string($timeline) {
$periods = array('day' => 86400);
$ret = '';
foreach($periods AS $name => $seconds){
$num = floor($timeline / $seconds);
$timeline -= ($num * $seconds);
$ret .= $num;
}
return trim($ret);
}
然后,我使用simpleXML:加载了我的xml文件
$xml = simplexml_load_file('tools.xml');
例如,使用上面的XML代码示例并执行
$days = $xml->xpath("//tool/dateentered");
foreach ($days as $day) {
print (time2string(time()-strtotime($day)));
}
这会将"2020-12-02"转换为"1",因此输出"1"。这意味着函数可以正常工作。
使用XPath,我想做的是,将用户在文本框中输入的值与xml中转换的"dateentered"进行比较,如果它们匹配,则显示工具名称。
所以类似于:
if(isset($_REQUEST["submit"])) {
// time2string function
$f_day = $_REQUEST["days"]; // getting the value the user enters in the textbox
$xml = simplexml_load_file('tools.xml');
// do something here
}
因此,假设使用我上面提供的xml示例,如果用户在文本框中输入1,那么输出应该是:
Facebook
我该如何解决这个问题?
除了必须创建一个函数之外,我还对不同的方法持开放态度,这正是我想到的。
事实证明,正如@CBroe所说,我甚至不需要将日期转换为天的函数,相反,我可以利用PHP的date((和strtotime((函数,如下所示:
<?php
if(isset($_REQUEST["submit"])) {
$xml = simplexml_load_file('tools.xml');
$f_days = $_REQUEST["days"];
$days = date("Y-m-d", strtotime("-$f_days days"));
$xdays = $xml->xpath("//tool[dateentered = '$days']/name");
foreach ($xdays as $name) {
echo "<h1 align='center'>".$name."</h1><br>";
}
}
?>
这将输出:
Facebook