【发布时间】:2020-12-03 08:55:17
【问题描述】:
再次回到另一个 XML/PHP 问题。 :)
我想在我的网页上显示过去 X 天提供的工具的名称。 X 是用户在文本框中输入的数字,单击提交按钮后,将显示最近 X 天内提供的工具的名称。
这将通过将用户输入的 X 值与我的 XML 文件中的日期进行比较来完成,并找到匹配的工具。
在我的 XML 文件中,我有一个“dateentered”节点,用于存储我输入的随机日期:
<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
我该如何解决这个问题?
除了必须创建一个函数之外,我还对不同的方法持开放态度,这正是我想出的。
【问题讨论】:
-
我不会将输入的日期转换为此处开始的天数差异。 XPath 2 能够进行大于/小于字符串比较,您在这里得到的日期格式是“可排序的”。
-
我明白了。如何将用户输入的值 X 与 xml 中的日期进行比较?因为一个具有字符串格式,而另一个具有日期格式。我对 XPath 和 PHP 还是很陌生,所以我真的很感激一些提示。 :)
-
不确定您所说的“因为一个具有字符串格式而另一个具有日期格式” 是什么意思?如果您让用户输入天数而不是日期,请先将其输入
Y-M-D。 (今天减去 x 天,格式为 Y-M-D) -
谢谢你,我能够解决这个问题!我在下面提供了我的答案。