Php 读取csv文件的最快方法

Php 读取csv文件的最快方法,php,performance,csv,fgetcsv,Php,Performance,Csv,Fgetcsv,我正在寻找一种非常快速的方法来读取csv文件。我的数据结构如下所示: timestamp ,float , string ,ip ,string 1318190061,1640851625, lore ipsum,84.169.42.48,appname 我使用fgetcsv将这些数据读入数组 问题是:性能。脚本必须定期读取(并处理)10000多个条目 我的第一次尝试非常简单: //Performance: 0,141 seconds / 13.5 MB wh

我正在寻找一种非常快速的方法来读取csv文件。我的数据结构如下所示:

timestamp ,float     , string    ,ip          ,string
1318190061,1640851625, lore ipsum,84.169.42.48,appname
我使用fgetcsv将这些数据读入数组

问题是:性能。脚本必须定期读取(并处理)10000多个条目

我的第一次尝试非常简单:

//Performance: 0,141 seconds / 13.5 MB

while(!feof($statisticsfile)) 
    {
    $temp = fgetcsv($statisticsfile);
    $timestamp[] = $temp[0];
    $value[] = $temp[1];
    $text[] = $temp[2];
    $ip[] = $temp[3];
    $app[] = $temp[4];
    }
我的第二次尝试:

//Performance: 0,125 seconds / 10.8 MB

while (($userinfo = fgetcsv($statisticsfile)) !== FALSE) {
   list ($timestamp[], $value[], $text, $ip, $app) = $userinfo;
}
  • 是否有任何方法可以进一步提高性能,或者我的方法是否尽可能快
  • 可能更重要的是:是否有任何方法来定义要读取的列,例如,有时只需要时间戳、浮点列。有没有比我的方式更好的方式(看看我的第二次尝试:)

  • 谢谢:)

    检查PHP读取此文件的时间:

    如果是bigg,则将文件移动到ramdisk或SSD

  • […]有时只有时间戳
  • 那样的事

    preg_match_all('#\d{10},\d{10}, (.*?),\d.\d.\d.\d,appname#',$f,$res);
    
    print_r($res);
    

    最长的线有多长?将其作为第二个参数传递给fgetcsv(),您将看到最大的改进。

    10000行CSV算不了什么。您所做的修改将(最多)使进程缩短几毫秒,而这只需要分秒。当你达到数百万或数十亿行时,问这种微优化问题。请仔细检查现有的许多行。以答案中给出的示例为例,在真实世界条件下对其进行基准测试/评测。然后用最快的方法解决你的问题。@Gordon你能从这些问题中指出一个更快/更好的例子吗。在过去的几天里,我已经读过了,结果就是这样。@Nyoman即使我愿意为你做你的工作,我也做不到,因为我无法在你的真实环境中分析各种可能的解决方案(
    fgetcsv
    内爆
    SplFileObject
    sscanf
    )。你必须自己做。
    $data=array\u map(“str\u getcsv”,file($filename))
    是最快的方法,因为它一次读取整个CSV文件。