【发布时间】:2012-02-08 06:13:59
【问题描述】:
我有 2 个非常大的数组(大小约为 2,500,000)。我需要找到这些数组之间的区别。 我的意思是我需要一个结果数组,其值在数组 1 中但不在数组 2 中。我使用了 array_diff() 但需要半个多小时!
第一个数组来自一个数据库,第二个数组来自另一个数据库。它们不在同一个数据库服务器上。数组的大小不同。我正在处理大量的手机号码。我需要找出那些在一个列表中但不在另一个列表中的手机号码
数组是带有数字键的普通数组。 diff代码如下:
$numbers_list = array_diff($numbers_list, $some_other_list);
有没有更好的方法来做到这一点?请帮忙。
【问题讨论】:
-
虽然我不熟悉 PHP 的内部结构,但
array_diff()似乎已经经历了几轮优化,并且可能会比您使用的任何通用数组差分函数更快自己滚。如果您对数据的结构有更好的了解,可能会有一种更快的方法来计算您正在查看的特定数组的差异。或者,正如之前的评论者所说,您可能希望先从数据库中获取差异。 -
如果它的数字(实数,即可以解释为整数)你应该能够
sort他们两个,并循环通过数组1,在数组2中用next推进指针只要如 value-in-2 -
在这种情况下,将每个数据库中的数据转储到文本文件中,然后使用 diff 之类的命令行工具进行比较,而不是在 PHP 中尝试,可能会更容易;或者从一个数据库进行转储,在第二个数据库上加载到临时表,然后使用 SQL 进行比较。
-
如果您只需要执行一次,则将其中一个表复制到另一个数据库中的临时表,执行为您提供差异的查询,然后完成它。
-
可以使用联合表吗?这样您就可以将两个表连接到一个数据库中,并以不同的方式调用结果。
标签: php arrays performance algorithm