<?php
error_reporting(E_ALL);
ini_set(‘display_errors‘, 1);
function load($file)
{
//No.1
//开始写代码,读取日志文件
$file = fopen($file,‘r‘);
$contents = array();
while(!feof($file))
{
$contents[] = fgets($file);
}
return $contents;
}
function eliminate($lines)
{
$new = array();
foreach($lines as $line)
{
list($dul,) = explode("\t", $line, 2);
if(isset($new[$dul]))
{
$line = str_replace($dul,"\t",$line);
}
$new[$dul][] = $line;
}
return $new;
}
function qSort($array)
{
$length = count($array);
if(count($array)<=1)
return $array;
//No.2
//开始写代码,对时间戳进行从小到大排序 快速排序
$left_array=$right_array=array();
//使用for循环进行遍历,把第一个元素当做比较的对象
for($i=1;$i<$length;$i++)
{
//判断当前元素的大小
if($array[$i]<$array[0]){
$left_array[]=$array[$i];
}else{
$right_array[]=$array[$i];
}
}
//递归调用
$middle=$array[0];
//end_code
return array_merge(qSort($left_array),array($middle),qSort($right_array));
}
$newFile = ‘‘;
$data = eliminate(load(‘aa.log‘));
//No.3
//开始写代码,调用函数,将日志中的数据排序,并将重新排好序的数据写入文件
$keys = array_keys($data);
//sort($keys); //其实不用快速排序 直接将键值sort即可
$keys = qSort($keys);
$newsFile = array();
foreach($keys as $value)
{
$newsFile[] = implode(‘\n‘, $data[$value]);
}
$newsFile = implode(‘ ‘, $newsFile);
//end_code
file_put_contents(‘bb.dat‘,$newsFile);
?>
面试题:考察 快速排序,文件的用法
当时时间的限制没做出来,后来花了一个小时终于弄出来。看来我还是很笨的。。。加油。。。找工作。。。