我喜欢在不使用in_array
的情况下比较两个数组,因为这两个数组都非常大(50,000多个)。我喜欢生成第一个数组中缺少的所有数组的新数组。
我将使用哪种最快最有效的解决方案?
First Array
从SQL Query
Array (
[0] => Array (
[id] => 17228219
[name] => ...
)
[1] => Array (
[id] => 17228220
[name] => ...
)
[2] => Array (
[id] => 17228221
[name] => ...
)
[3] => Array (
[id] => 17228222
[name] => ...
)
[4] => Array (
[id] => 17228223
[name] => ...
)
[5] => Array (
[id] => 17228224
[name] => ...
)
)
第二阵列
从简单XML生成
Array (
[0] => SimpleXMLElement Object (
[0] => 17228219
)
[1] => SimpleXMLElement Object (
[0] => 17228221
)
[2] => SimpleXMLElement Object (
[0] => 17228222
)
[3] => SimpleXMLElement Object (
[0] => 17228224
)
)
新阵列
创建一个缺少ID的数组
Array (
[0] => Array (
[id] => 17228220
[name] => ...
)
[1] => Array (
[id] => 17228223
[name] => ...
)
)
答案 0 :(得分:2)
例如,你可以通过实现AVL树来加快速度,然后就可以了 O(N * Log(N)),您可以找到many implementations of trees in php
比'''(N ^ 2)加倍快一点, 另外,你可以对数组进行排序并在每个迭代上将这两个数组移动一步,这样你就可以找到差异,但这也是O(N * Log(N)),很难相信它可以比这更快。
P.S。 如果它已经排序(比如你发布的代码),那么你可以用O(N)用第二种方式做到这一点
答案 1 :(得分:1)
从算法的角度来看,最快的是按项目(mergesort like)比较和补充检测一次通过两个排序的数组...时间复杂度O(N logN)+ O(MlogM)+ O (M + N)〜 O(N log N)......
AVL Tree太过分了......
答案 2 :(得分:0)
使用'id'作为两个集合的数组键将使得基于PHP的算法更快,就像V-X所暗示的那样。
但是,最有效的解决方案是将您的引用集保留在数据库中并向其添加XML记录,检测插入时或后续SELECT连接上的冲突/非冲突,特别是如果参考集更大比对比组。
你没有说你打算用不匹配的数据做什么 - 这与方法有关。