7

我需要在 PHP 中找出一个数组是否具有另一个数组的任何值。

例如 :

$search_values = array('cat', 'horse', 'dog');
$results = array('cat', 'horse');
if (in_array($search_values, $results))
    echo 'A value was found';

当然,上面的并没有真正起作用(in_array)。

基本上,基于上面的例子,我想检查$results数组中是否有cathoursedog

我是否需要在第一个数组中执行“foreach”,然后在第二个数组中执行“in_array”,然后返回 true;如果找到了?或者,还有更好的方法?

4

7 回答 7

16

您可能想使用array_intersect()

$search_values = array('cat', 'horse', 'dog');
$results = array('cat', 'horse');

if ( count ( array_intersect($search_values, $results) ) > 0 ) {
    echo 'BINGO';
} else {
    echo 'NO MATCHES';
}
于 2012-08-08T16:39:20.380 回答
4

在某些大型数组的情况下,array_intersect() 会更慢,因为它返回整个交集,这是不必要的。复杂度为 O(n)。

只找到一个匹配项的代码:




     $arr1 = array('cat', 'dog');
        $arr2 = array('cow', 'horse', 'cat');

        // build hash map for one of arrays, O(n) time
        foreach ($arr2 as $v) {
            $arr2t[$v] = $v;
        }
        $arr2 = $arr2t;

        // search for at least one map, worst case O(n) time
        $found = false;
        foreach ($arr1 as $v) {
            if (isset($arr2[$v])) {
                $found = true;
                break;
            }
        }

于 2012-10-24T08:57:38.870 回答
0

使用 in_array 时,您需要将 NEEDLE 指定为第一个值,它是一个字符串。第二个值是您要检查的数组。

如果要比较两个数组,则需要使用 array_intersect。

于 2012-08-08T16:40:46.583 回答
0

像这样的东西:

return !empty(array_intersect($search_values, $result));
于 2012-08-08T16:42:38.100 回答
0

使用array_intersectPHP 函数:

<?php

$search_values = array('cat', 'horse', 'dog');
$results = array('cat', 'horse');

$present = array_intersect( $search_values, $results );

if( count( $present ) )
{
    // your code
    echo 'A value was found';
    print_r( $present );
}
于 2012-08-08T16:42:39.847 回答
0

我认为这会奏效。我的 MAMP 设置不在这台 Mac 上,所以无法测试。

$search_values = array('cat', 'horse', 'dog');
$results = array('cat', 'horse');
foreach($results as $k => $v){
 if(in_array($v, $search_values){
    $found = $found && true;
  }
}
于 2012-08-08T16:46:12.217 回答
0

您可以使用以下代码:

$search_values = array('cat', 'horse', 'dog');
$results = array('cat', 'horse');
if (count(array_intersect($search_values, $results)) > 0 )
    echo 'A value was found';

使用array_intersect函数。

这是工作演示

于 2012-08-08T16:46:17.170 回答