性能问题(嵌套Foreach循环,大数据集)

时间:2013-05-23 17:17:16

标签: php arrays performance foreach nested

我正在开发一个地址标准化应用程序。我有一个包含8000行的数据库表,每行包含一个地址。我的目标是检查每个地址与数据库中的每个其他地址的相似但不完全匹配,然后输出结果。

目前,我的方法是将8000行加载到数组中并使用嵌套的foreach循环将地址传递给函数,该函数在找到匹配时将返回true(并将匹配存储在数组中以输出所有匹配后循环)。

问题是,这需要永远加载。这通常是你们如何接近这个,还是我应该寻找其他解决方案?

示例:“123 garden st.ste.140”应该与“123 garden street suite 140”相匹配,数据库排序的想法让我想到了..

非常感谢所有帮助! 特雷弗卡瓦诺

2 个答案:

答案 0 :(得分:3)

使用for循环,因为foreach循环是资源密集型的,因为每次交互都会复制元素。虽然我说使用您当前的嵌套循环方法,但您将调用匹配方法8000 ^ 8000次?这也是非常密集的,另一种方法是使用地址字段上的排序查询数据库,因此匹配算法将检查array[i]地址是否等于array[i+1]等等,不需要嵌套循环

答案 1 :(得分:3)

您是否尝试直接从数据库中检索所有重复的地址?

SELECT addressField
FROM tableName 
GROUP BY addressField 
HAVING COUNT (addressField)>0

该查询应该检索数据库表中的所有重复地址。

然后,您可以将该查询嵌入到父查询中以处理重复项,或者只是将结果输出到数组。

相关问题