在PHP中使用XPath显示最近X天内提供的工具的名称



返回到另一个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

最新更新