php-在csv文件中搜索和替换什么更快?在字符串中还是在数组中?

php-在csv文件中搜索和替换什么更快?在字符串中还是在数组中?,php,python,mysql,arrays,csv,Php,Python,Mysql,Arrays,Csv,我处理的csv文件通常有200万到500万行。例如,我有3000个特定值,需要用3000个不同的值替换。我有两个3000个项目的数组,叫做$search和$replace。注意:搜索和替换短语是完整的值(例如…,搜索…->…,替换…)。此外,我最终将把它导入mysql数据库 实现这一点最有效/最快的方法是什么 将csv文件的全部内容加载到字符串中,并使用数组和字符串运行str_replace 将csv文件加载到数组中,并使用array_search()替换这些值 将csv文件加载到mysql数据

我处理的csv文件通常有200万到500万行。例如,我有3000个特定值,需要用3000个不同的值替换。我有两个3000个项目的数组,叫做$search和$replace。注意:搜索和替换短语是完整的值(例如…,搜索…->…,替换…)。此外,我最终将把它导入mysql数据库

实现这一点最有效/最快的方法是什么

  • 将csv文件的全部内容加载到字符串中,并使用数组和字符串运行str_replace

  • 将csv文件加载到数组中,并使用array_search()替换这些值

  • 将csv文件加载到mysql数据库中,然后使用查询进行搜索和替换

  • 改用python

  • 其他


  • 我知道我可以设置一些测试并比较它们的运行时,但我更想了解为什么一个比另一个好,或者它们搜索的机制(例如:O(n)、二进制搜索等?)

    如果您的csv文件太大(>100万行),除非内存使用与您无关,否则一次加载所有文件可能不是最好的方法

    因此,我建议逐行运行replace。下面是一个非常基本的示例:

    $input = fopen($inputFile, 'r');
    $output = fopen($outputFile, 'r+');
    
    while (!feof($input)) {
        $input = fgets($input);
    
        $parsed = str_replace($search, $replace, $input);
    
        fputs($output, $parsed);
    }
    
    这应该足够快,并且可以让您轻松地跟踪进度。如果只想替换特定列,可以使用
    fgetcsv
    fputcsv
    而不是
    fgets
    fputs

    我绝对不会尝试使用mysql来实现这一点,因为简单地将这么多数据插入数据库需要一段时间


    至于python,我不确定它是否真的能以任何方式使算法受益。

    非常感谢您的建议!我也同意,根据我的经验,最好使用php处理数据,而不是先导入然后通过mysql。虽然我知道这是一个很大的内存,但我知道运行此脚本的机器有足够的内存来执行此任务,除了此任务之外,不会用于任何其他用途,并且一次只能运行一个任务。因此,我最初使用逐行方法(在内存中,存储在数组中的行,分解和内爆来管理它),但我不知道在内存中,将数据作为整个字符串进行str_替换是否会更快。