Eggdropで生成されたIRCログを時系列で参照できるPHPスクリプトを使用しています。最初は、ディレクトリの内容を読み取り、ファイルの変更日に基づいてログ名を配列に挿入していました。ただし、最近サーバーを移動した後、ファイルの変更日が更新され、ナビゲーションが乱雑になりました。
ログファイル名の構造は次のようになります。
channel.log.dayMONTHyear.txt
例えば:
shrawberry.log.08Apr2011.txt
これは、人間が読める形式であるため、適切に注文するのが困難です。
月コードは常に3文字の長さであり、シーケンス内で予測可能な位置にあるため、非標準の日付コードを手動で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);
}
これにより、配列をいじくり回すことなく、ログを正常に並べ替えることができます。