/*
请将日志文件20150710.log按照时间对每行进行排序,如果时间已经出现过一次,再出现相同的时间用"\t"替换。(日志文件第一列为时间戳)
20150710.log内容如下:
22367614 [info] 0.00 OK 0
22367611 [debug] 0.00 TEST 0
22367613 [info] 0.00 OK 0
22367613 [info] 2.44 OK 0
22367614 [info] 2.44 OK 0
22367612 [debug] 2.44 TEST 0
22367618 [error] 2.44 NULL 0
22367617 [info] 2.44 OK 0
22367618 [error] 2.44 NULL 0
22367610 [error] 2.44 NULL 0
22367613 [info] 2.44 OK 0
22367611 [info] 2.44 OK 0
22367612 [info] 2.44 OK 0
22367619 [info] 2.44 OK 0
22367618 [debug] 2.44 TEST 0
22367617 [debug] 2.44 NOTICE 0
22367610 [info] 2.44 OK 0
22367617 [error] 2.44 NULL 0
22367615 [info] 2.44 OK 0
22367614 [info] 2.44 OK 0
应写入sh20150710.dat的内容如下:
22367610 [error] 2.44 NULL 0
[info] 2.44 OK 0
22367611 [debug] 0.00 TEST 0
[info] 2.44 OK 0
22367612 [debug] 2.44 TEST 0
[info] 2.44 OK 0
22367613 [info] 0.00 OK 0
[info] 2.44 OK 0
[info] 2.44 OK 0
22367614 [info] 0.00 OK 0
[info] 2.44 OK 0
[info] 2.44 OK 0
22367615 [info] 2.44 OK 0
22367617 [info] 2.44 OK 0
[debug] 2.44 NOTICE 0
[error] 2.44 NULL 0
22367618 [error] 2.44 NULL 0
[error] 2.44 NULL 0
[debug] 2.44 TEST 0
22367619 [info] 2.44 OK 0
*/
以下为程序函数
第一步:
/**
* [load 函数 把日志文件的每一行写入数组并返回]
*/
function load($file) {
//打开日志文件
$handle = fopen($file,'r') or die('打开文件失败');
//循环读取文件的每一行,并写入数组
while (!feof($handle)) {
$lines[]=fgets($handle,'4096');
}
//关闭打开的文件资源
fclose($handle);
//返回数组
return $lines;
}
第二步:
/**
* [eliminate 函数 对日志文件每一行读取的日志依照时间戳进行分类,出现相同的时间用"\t"替换]
*/
function eliminate($lines) {
//定义一个新的数组
$new = array();
//对传递过来的数组参数循环每一行日志
foreach($lines as $line) {
//切割出每一行日志的时间戳,并用list语句赋值给$dul
list($dul,) = explode("\t", $line, 2);
//判断时间戳是否重复
if(isset($new[$dul])) {
//如果重复用“\t”也就是文本文档的空格代替,形成二维数组
$line = str_replace($dul,"\t",$line);
}
//对每一行日志,按照时间戳分类,放入同一数组下
$new[$dul][] = $line;
}
//返回二维数组,数组的键为时间戳
return $new;
}
第三步:
/**
* [usort description]
* @param [数组] $new [需要排序的二维数组]
* @param [字符串] $filename [需要写入的文件文件名]
*/
function qsort($new,$filename) {
$tmp ='';
//对二维数组排序
ksort($new);
//双重循环把排好序的日志行写入到字符串中
foreach ($new as $values) {
foreach ($values as $value) {
$tmp .= $value."\r\n";
}
}
//把字符串写入到文件中
file_put_contents("$filename",$tmp);
}