gpt4 book ai didi

PHP Loop - 导致严重延迟的表达式/函数

转载 作者:可可西里 更新时间:2023-11-01 12:21:34 25 4
gpt4 key购买 nike

我想知道是否有人可以阐明这个问题.. PHP 5.3.0 :)

我有一个循环,它抓取 CSV 文件(大,200mb)的内容,处理数据,为 mysql 插入构建变量堆栈,一旦循环完成并创建变量,我将插入信息。

现在首先,mysql 插入执行完美,没有延迟,一切都很好,但是循环本身有延迟,我最初使用 fgetcsv() 读取 CSV 文件,但与 file_get_contents() 相比,这有严重延迟 - 所以我切换到 file_get_contents()。循环将在几秒钟内执行,直到我尝试添加一个函数(我还在没有函数的循环中添加了表达式以查看它是否有帮助)以创建一个包含每一行的 CSV 数据的数组,这是什么导致了解析时间的严重延迟! (基于这个 200mb 的文件,差异大约是 30 秒,但我猜这取决于 csv 文件的文件大小)

这是一些代码,您可以看到我在做什么:

$filename = "file.csv";
$content = file_get_contents($filename);
$rows = explode("\n", $content);
foreach ($rows as $data) {
$data = preg_replace("/^\"(.*)\"$/","$1",preg_split("/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/", trim($data))); //THIS IS THE CULPRIT CAUSING SLOW LOADING?!?
}

运行上面的循环,几乎立即执行,没有行:

$data = preg_replace("/^\"(.*)\"$/","$1",preg_split("/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/", trim($data)));

我还尝试创建如下函数(循环外):

function csv_string_to_array($str) {
$expr="/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/";
$results=preg_split($expr,trim($str));
return preg_replace("/^\"(.*)\"$/","$1",$results);
}

并调用函数而不是一个衬里:

$data = csv_string_to_array($data);

再次没有运气:(

任何帮助将不胜感激,我猜测 fgetcsv 函数基于它导致的延迟以非常相似的方式执行,循环遍历并从数据行创建数组。

丹尼

最佳答案

正则表达式子表达式(以“(...)”为界)是问题所在。表明将这些添加到表达式会大大降低其性能是微不足道的。我要尝试的第一件事是停止使用 preg_replace() 来简单地删除前导和尾随双引号(trim() 将是一个更好的选择),看看有多大帮助。之后,您可能需要尝试使用非正则表达式的方式来解析该行。

关于PHP Loop - 导致严重延迟的表达式/函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com