【发布时间】:2011-07-22 04:51:49
【问题描述】:
我正在做一个小项目,我需要一些帮助。我有一个包含 150,000 行的 CSV 文件(每行有 10 列数据)。我正在使用 fscvread 读取文件,并且在循环期间,我想将每行的其中一列(称为 stringx)与 10,000 个单词的数组进行匹配。如果 stringx 中存在 10,000 个单词中的任何一个,则使用 preg_replace 将其删除。
现在这一切都很好。我一切正常,但问题是,它太慢了。
我尝试了 2 种方法来匹配数组。 1)我使用explode(“”,$stringx)将stringx转换为数组,然后使用array_diff($array_stringx,$array_10000); 2) 在 $array_10000 上使用 foreach 并在 $stringx 上使用 preg_replace
方法 1 大约需要 60 秒来遍历 200 行数据,方法 2 可以在 60 秒内循环 500 行。
有没有更好的方法来做到这一点?
再次,我正在寻找一种有效的方法来(基本上)array_diff 10,000 个单词的数组与 150,000 个字符串一次一个。
非常感谢您的帮助。
【问题讨论】:
-
听起来像数据库最适合这个。
-
您的字典需要数组以外的东西。可以加快字典查找时间的方法。内存消耗最多是微不足道的。
-
彼得你能详细说明一下吗?
-
您是否至少对代码进行了一次分析,以确保瓶颈是代码的那部分?
-
二进制搜索、纯字符串等。优化查找速度而不是内存消耗。您可能需要对字典进行排序,甚至可能对其进行分组。
标签: php foreach preg-match string-matching array-difference