datetime companyid busiid mobile type fileid
2006-08-04 00:00:00 23 00000235 13599993553 2 221
2006-08-04 00:30:10 25 00000356 13685156666 2 256
2006-08-04 00:30:20 25 00000556 13685156666 1 246
2006-08-04 00:30:50 25 00000356 13685156666 2 256
.....
发的都乱了,看这个吧
2006-08-04 00:00:00 23 00000235 13599993553 2 221
2006-08-04 00:30:10 25 00000356 13685156666 2 256
2006-08-04 00:30:20 25 00000556 13685156666 1 246
2006-08-04 00:30:50 25 00000356 13685156666 2 256
.....
发的都乱了,看这个吧
$file = file ($file);
$file_line_number = count($file);
for($i=1;$i<$file_line_number;$i++){
$file_line[$i] = explode($distance, $file[$i]);
if($file_line[$i][1] == $companyid){
$companyid = $file_line[$i][2];
echo $companyid;
}
}
}$distance是文件中的每行中每项内容之间的间距
$logfile= logtxt.txt";
if(file_exists($logfile)){
$all_arr =array();
$tag = "";
$fp = fopen($logfile, "r");
while ($buffer = fgets($fp, 4096)) {
$exp = @explode("\t",$buffer);
$visit_time = substr($exp[0],0,15);
$companyid = $exp[1];
$mobile = $exp[3];
$type = $exp[4];
$fileid = $exp[5];
$tag=$visit_time.",".$companyid.",".$mobile.",".$type.",".$fileid;
$all_arr[$tag]+=1; }
fclose( $fp );
}$all_arr 数组应该就是你要的结果了。同一分钟,同companyid,mobile,type,fileid
用程序生成时,字段间的分隔符要么是制表符要么是空格符。
决不会是你这样两者混用且数量不等2、如果有统一的分隔符就可以方便的用fgetcdv读取数据了。但对于你的格式,需要自行书写函数
function get_data($fp) {
$but = fgets($fp);
if(! $buf) return false;
return split("[\t ]+", $buf);
}
使用
$fp = fopen($filenane, 'r');
while($row = get_data($fp)) {
....
}
fclose($fp);
对于你的数据,返回的数组依次为
date、time、companyid、busiid、mobile、type、fileid
只有下标可用3、你的查询要求令人费解,还请描述清楚
取companyid的个数则在上面的循环里
$ret[$row[2]]++;
即可
其他约束条件可自行加入
我要查询某一companyid对应的busiid的个数(相同mobile ,相同type,相同fileid,1分钟内的重复不算),这样的值怎么取?
*/
1:取得原始数据;
2:分解原始数据;
3:依你的要求过滤分解后数据;
4:存入库或其他存储方式中;
5:重复上述步骤;