我有一个巨大的文件,其中有数据行(几乎相等的长度)。我想浏览它们,找到某个单词的每一个出现,然后把这个单词出现的整行都显示在屏幕上。目前我正在使用这个方法:
$result_counter = 0;
$result_array[1] = 'No results';
$search_slug = $request->input('search_slug');
$fp = fopen(base_path('storage'app'xas.txt'), "r");
while (false !== ($line = fgets($fp))) {
// Process $line, e.g split it into values since it is CSV.
$exploded = explode('-', $line);
$exploded = implode('', $exploded);
set_time_limit(30);
if(strpos($exploded, strtoupper($search_slug))) {
$result_counter++;
$result_array[$result_counter] = $exploded;
}
}
return view('results')->with(array('results' => $result_array, 'query' => $search_slug));
fclose($fp);
逐行浏览一个大文件太花时间了。
你可能会问-为什么不使用MySQL?
有一个巨大的问题-我的文件有250万行长,可能很快会更大。如果我试图一次性更新数据库,服务器的所有者会封禁我的账户,更不用说人们每小时都会查询其中的大部分内容。我也买不起"无限制"的服务器。我将尽快转移到MySQL,但现在我需要一个快速的解决方案。
如何使用PHP解决这个问题?有没有一种方法可以搜索文件中出现的单词,然后只抓取这些行?
您可以使用这样的正则表达式^.*yourword.*$.
资源:http://www.regular-expressions.info/completelines.html