查找数组是否至少具有 1 个值


Find if an array has at least 1 of the values

我需要在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数组中是否有小时

我是否需要在第一个数组中做一个"foreach",然后在2sd数组中做一个"in_array",然后返回true;如果找到的话?还是有更好的方法?

你可能

想用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';
}
在某些情况下,

对于大型数组,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;
            }
        }

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

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

像这样:

return !empty(array_intersect($search_values, $result));

使用 array_intersect PHP 函数:

<?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 );
}

我认为这会起作用。我的 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;
  }
}

您可以使用以下代码:

$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功能。

这是工作演示: