【发布时间】:2013-07-25 17:11:06
【问题描述】:
我有 2 个数组要比较并找出是否至少有一个共同值。
这很好用:
$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(2, 3, 4, 5, 6);
if (array_intersect($arr1, $arr2)) {
// good, at least one match found
}
但是,问题在于性能。在找到第一个匹配项后继续循环遍历数组是没有意义的。是否有原生 PHP 函数或有用的 sn-p 来实现这一点?
foreach() 和 in_array() 的组合可以解决问题吗?
【问题讨论】:
-
你能发布你的 2 个数组吗?
-
@Maximus2012 为什么数组中的内容很重要?我不认为有任何内置的东西可以做到这一点。但是您可以在其中一个上使用
array_flip,然后在另一个使用array_key_exists的循环上使用。 -
in_array 将在内部循环遍历一个数组的所有值以获取另一个数组中的每个值,因此那里可能没有节省。
-
@Orangepill,通过 所有 值?还是会在遇到第一个匹配项时返回?
-
直到第一场比赛。如果正常情况是存在交叉点 loop/array_search 可能会平均产生更好的结果。如果您不期望匹配数组相交将是要走的路。
标签: php arrays loops array-intersect