Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在CSV文件中查找字符串的最佳方法_Php_Performance_Csv - Fatal编程技术网

PHP在CSV文件中查找字符串的最佳方法

PHP在CSV文件中查找字符串的最佳方法,php,performance,csv,Php,Performance,Csv,我想在PHP5中的CSV文件中找到字符串的匹配项 对我来说,有两种方法: 首先:从csv文件中获取所有事件,然后检查数组中是否存在我的字符串 第二:对于我的CSV文件的每一行,检查它是否匹配。如果是,则结束循环 哪种方法最好?我的CSV文件中有很多行,所以我关心性能 如果你知道一些关于它的线索,我很高兴听到它:)最快的方法是将文件作为字符串读取,然后找到该单词的第一个匹配项,如下所示: $file = file_get_contents('file_name.csv'); if (strp

我想在PHP5中的CSV文件中找到字符串的匹配项

对我来说,有两种方法:

  • 首先:从csv文件中获取所有事件,然后检查数组中是否存在我的字符串
  • 第二:对于我的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);
}