$ips = file_get_contents($_SERVER['DOCUMENT_ROOT']."/visitors.txt");
$arr = explode(",",$ips);
$today = strtotime(date('Y-m-d H:i:s'));
for ($n = 0, $max = count($arr); $n <= $max; $n++) {
$visArr = explode("#",$arr[$n]);
$visDate = strtotime($visArr[1]); //$visArr[1] = 2011-12-27 14:10:45
if($visDate < $today){
unset ($arr[$n]);
}
}
print_r($arr); //empty array!
存储的数据
xxx.xxx.xxx.xxx#2011-12-27 11:56:24,
xxx.xxx.xxx.xxx#2011-12-28 11:56:24,
当我比较访客日期时,结果不正确,我可能知道它有什么问题吗?
编辑:我修复了我的代码,并在比较两个日期时仍然给出一个空数组!!任何建议??
答案 0 :(得分:1)
它有很多问题,但这是最明显的事情:
$arr
正在被,\r\n
展开,这意味着逗号将不再出现在任何结果数组元素中,因为分隔符将被丢弃(除非数据比您最初发布的数据多) $key
循环中使用foreach
,因此您可能只是省略它。$arrr
在第一个循环中不断被覆盖,这意味着它只包含循环完成时来自$arr
的最后一个元素的逗号分隔数据。由于之前的explode()
调用删除了您的尾随逗号,因此此时可能只是一个数组。您在第二个循环条件中使用count()
函数。计数不会改变,所以你应该把它放在循环本身之前或第一部分中,如下所示:
for ($n = 0, $max = count($arrr); $n <= $max; $n++) {
您在第二个循环中使用<=
,因此您正在进行额外的不需要的迭代。 n
元素数组的最大索引为n - 1
。在这种情况下,您应该使用<
,因为未定义$arrr[count($arrr)]
。
答案 1 :(得分:0)
首先删除逗号,然后删除 strtotime
$visDate = strtotime(trim($visArr[1], ","));
答案 2 :(得分:0)
...嗯
$today = strtotime(date("Y-m-d H:i:s"));
你让PHP生成一个时间戳,将其格式化为字符串,然后将其解析回时间戳...为什么不简单地
$today = time();
答案 3 :(得分:0)
首先,你必须这样做:
$today = time();
获取自Epoch以来的当前时间。
由于这种错误的比较,你最终得到一个空数组:
if($visDate < $today)
此条件始终返回true ,因为$today
变量包含当前时间,而访问者日志文件包含历史访问者记录,显然小于当前时间戳。
如果您只是希望您的最终数组仅向显示过去24小时的访问者,那么您的意图应该是:
if(($today-$visDate) > 86400)
84600一天中没有秒。