【发布时间】:2014-06-27 04:17:16
【问题描述】:
文本文件(实际上是 .dat)中包含的数据如下所示:
LIN*1234*UP*abcde*33*0*EA
LIN*5678*UP*fghij*33*0*EA
LIN*9101*UP*klmno*33*23*EA
文件中实际上有超过 500,000 行这样的行。
这是我现在使用的:
//retrieve file once
$file = file_get_contents('/data.dat');
$file = explode('LIN', $file);
...some code
foreach ($list as $item) { //an array containing 10 items
foreach($file as $line) { //checking if these items are on huge list
$info = explode('*', $line);
if ($line[3] == $item[0]) {
...do stuff...
break; //stop checking if found
}
}
}
问题在于它运行得太慢 - 每次迭代大约需要 1.5 秒。我单独确认影响速度的不是“……做事……”。相反,它是在寻找正确的项目。
如何加快速度?谢谢。
【问题讨论】:
-
如果你想搜索一个 500,000 行的文件 10 次,它可能总是需要很长时间......
-
是的,虽然从技术上讲,它搜索的是数组而不是文件。我想这里一定有一些数组函数可以提供帮助。
-
您可以在整个文件上运行正则表达式传递而不将其拆分为数组,这取决于您在
...do stuff...部分中执行的操作以及您是否需要返回行号或其他部分该行等编辑,甚至只是一个简单的strstr()查找该字符串... -
只使用
grep怎么样?将输出写入文件,然后用 PHP 读取?
标签: php performance loops