我正在使用允许按时间顺序浏览 Eggdrop 生成的 IRC 日志的 PHP 脚本。最初,我正在读取目录内容并根据文件修改日期将日志名称插入到数组中。然而,在最近一次服务器移动之后,文件的修改日期已更新,导航现在变得混乱!
日志文件名结构如下所示:
channel.log.dayMONTHyear.txt
例如:
shrawberry.log.08Apr2011.txt
由于非常易于阅读,因此很难正确排序。
由于月份代码总是三个字符长并且在序列中处于可预测的位置,我可以手动将非标准日期代码解析为 Unix 时间戳,遍历列表并将每个项目添加到具有该时间戳的数组中,然后排序该数字的数组。
但这听起来太过分了。
我是在赚钱,还是我提出的解决方案是理想的?
在 Marc B. 的帮助下,我实现了以下功能:
function dateFromEggLog($string){
$month = substr($string,-11,-8);
$day = substr($string,-13,-11);
$year = substr($string,-8,-4);
for($i=1;$i<=12;$i++){
if(strtolower(date("M", mktime(0, 0, 0, $i, 1, 0))) == strtolower($month)){
$month = $i;
break;
}
}
return "$year-$month-$day";
}
function my_compare($a, $b) {
$a_date = dateFromEggLog($a);
$b_date = dateFromEggLog($b);
if ($a_date == $b_date) {
return 0;
}
$a = strtotime($a_date); // convert to PHP timestamp
$b = strtotime($b_date); // convert to PHP timestamp
return (($a < $b) ? -1 : 1);
}
这成功地对我的日志进行了排序,而无需弄乱我的数组。