Php 读取csv文件的最快方法
我正在寻找一种非常快速的方法来读取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
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文件。