PHP在CSV文件中查找字符串的最佳方法
我想在PHP5中的CSV文件中找到字符串的匹配项 对我来说,有两种方法:PHP在CSV文件中查找字符串的最佳方法,php,performance,csv,Php,Performance,Csv,我想在PHP5中的CSV文件中找到字符串的匹配项 对我来说,有两种方法: 首先:从csv文件中获取所有事件,然后检查数组中是否存在我的字符串 第二:对于我的CSV文件的每一行,检查它是否匹配。如果是,则结束循环 哪种方法最好?我的CSV文件中有很多行,所以我关心性能 如果你知道一些关于它的线索,我很高兴听到它:)最快的方法是将文件作为字符串读取,然后找到该单词的第一个匹配项,如下所示: $file = file_get_contents('file_name.csv'); if (strp
- 首先:从csv文件中获取所有事件,然后检查数组中是否存在我的字符串
- 第二:对于我的CSV文件的每一行,检查它是否匹配。如果是,则结束循环
如果你知道一些关于它的线索,我很高兴听到它:)最快的方法是将文件作为字符串读取,然后找到该单词的第一个匹配项,如下所示:
$file = file_get_contents('file_name.csv');
if (strpos($file, 'your string') !== false) {
// Found it
}
// Use mb_strpos for UTF-8
if (mb_strpos($file, 'your string') !== false) {
// Found it
}
如果它更复杂,那么最好使用regex
和preg\u match
更新:
您也可以使用这种方法逐行检查,这样您就不会将整个300K行文件存储在内存中:
$file = new SplFileObject('file_name.csv');
while($file->valid()) {
if (strpos($file->current(), 'your string') {
// Found it
break;
}
$file->next();
}
对于大型csv文件,应使用fgetcsv()
太好了,你有两种方法。如果您的尝试失败,请尝试它们,然后返回我们并编辑您的问题。由于您的
第一个
方法基本上是一个循环中的第二个
,因此应该非常清楚,在性能和资源使用方面,您需要在此处询问什么更有意义。您可能需要使用类似分隔符的内容,为了不获得错误的匹配(或者忽略一个,因为它包含了前面提到的一个您没有预料到的字符),应该考虑使用PHP提供的适当方法fgetcsv
首先读取一行数据,因此当您找到所需内容时,使用该行可以很容易地打破循环。@misorude Perfect,不知道该函数!其他人,不是什么也不说,而是做一些有用的事情:)可能重复感谢你的回答。如果我有30万行可以一次获取所有内容,这不是很重吗?
$handle = fopen('filename.csv', 'r'))
if($handle)
{
while(($line = fgetcsv($handle)) !== false)
{
// do whatever with csv data
}
fclose($handle);
}