【问题标题】:Find if an array has at least 1 of the values查找数组是否至少包含 1 个值
【发布时间】:2012-08-05 20:01:14
【问题描述】:

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

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

【问题讨论】:

标签: php arrays


【解决方案1】:

您可能想使用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”。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      类似这样的:

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

      【讨论】:

        【解决方案5】:

        使用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 );
        }
        

        【讨论】:

          【解决方案6】:

          我认为这会奏效。我的 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;
            }
          }
          

          【讨论】:

            【解决方案7】:

            您可以使用以下代码:

            $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 函数。

            这里是working demo

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-03-21
              • 2010-10-29
              • 2013-08-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多