【问题标题】:PHP array_intersect() till the first matchPHP array_intersect() 直到第一场比赛
【发布时间】: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


【解决方案1】:

这个怎么样?

foreach ($arr1 as $key => $val) {
    if (in_array($val, $arr2)){
        // do something, maybe return so you wouldn't need break
        break;
    }
}

【讨论】:

  • 是的,这正是我的想法。我只是希望array_intersect() 可能有一个本机函数或参数
【解决方案2】:

只比较第一个值?

$arr1 = array(1, 2, 3, 4, 5); 
$arr2 = array(2, 3, 4, 5, 6); 
if (array_intersect($arr1, $arr2)[0]) { 
    // good, at least one match found 
} 

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 2012-03-27
    • 2022-11-23
    • 1970-01-01
    • 2022-01-08
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多