Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 性能问题(嵌套的Foreach循环、大数据集)_Php_Arrays_Performance_Foreach_Nested - Fatal编程技术网

Php 性能问题(嵌套的Foreach循环、大数据集)

Php 性能问题(嵌套的Foreach循环、大数据集),php,arrays,performance,foreach,nested,Php,Arrays,Performance,Foreach,Nested,我正在申请地址标准化。我有一个8000行的数据库表,每行包含一个地址。我的目标是对照数据库中的每个其他地址检查每个地址是否存在类似但不完全匹配的情况,然后输出结果 目前,我的方法是将8000行加载到一个数组中,并使用嵌套的foreach循环将地址传递给一个函数,该函数在找到匹配项时将返回true(并将匹配项存储在数组中,以在循环后输出所有匹配项) 问题是,这需要很长时间才能加载。这是你们通常的做法,还是我应该寻找其他的解决方案 例如:“123 garden st.ste.140”应该与“123

我正在申请地址标准化。我有一个8000行的数据库表,每行包含一个地址。我的目标是对照数据库中的每个其他地址检查每个地址是否存在类似但不完全匹配的情况,然后输出结果

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

问题是,这需要很长时间才能加载。这是你们通常的做法,还是我应该寻找其他的解决方案

例如:“123 garden st.ste.140”应该与“123 garden street suite 140”匹配,但数据库排序的想法让我思考

非常感谢您的帮助!,
Trevor Kavanaugh

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

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

SELECT addressField
FROM tableName 
GROUP BY addressField 
HAVING COUNT (addressField)>0
该查询应检索数据库表中的所有重复地址


然后,您可以将该查询嵌入父查询以处理重复项,或者简单地将结果输出到数组

你知道。。我一直坐在这里重写,试图让它更快,但这实际上是很有意义的,我不知道我怎么会错过它LOL。。。考虑到我正在创建数组,然后在父循环中重新创建它,然后在子循环中再次创建它。。我甚至不知道我为什么用foreach。谢谢你,伙计!我将在几天后发回我的声明,它不会是8000^8000,因为你希望能把它和它自己比较一下。将第1行与第2-8000行、第2行与第3行进行比较-8000@RyanB,当索引相等时,我不进行比较。但它仍然需要很长时间才能运行。奇怪的是,子循环体中发生的所有事情都是对一个函数的调用,该函数目前只包含几个regex replace语句,并且总是返回false。我知道有64000000次循环被执行,但是该死的..如果我正确理解了原始帖子,他在数据库中寻找一个副本,所以你不会检查自己,而是检查一个副本,因此,对于每个数组项,您需要搜索整个数组排序如果仍然将相似的元素紧密地聚集在一起,则必须分析相邻的数组元素,您的主要问题是64m次匹配尝试。你想尝试消除这一点,这将是可怕的,但我实际上是寻找类似的重复,不确切。例如,“123 garden st.ste.140”应该与“123 garden street suite 140”匹配啊,对了,我想可以进行全文搜索,但我有点太复杂了!祝你好运:-)按照菲尔的回答,你看到了吗