2012-08-08 67 views
2

我需要在PHP中找出数组中是否有其他数组的值。查找数组是否至少有一个值

例如:

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

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

基本上,根据上面的例子,我要检查,如果$结果阵中,有或者是心爱的马

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

+0

复制的[in_array()和多维数组(http://stackoverflow.com/questions/4128323/in-array-and-multidimensional-array) – Rhys 2012-08-08 16:39:57

+0

重复?我的问题不是关于多维数组。 – 2012-08-08 16:56:28

回答

10

您可能需要使用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'; 
} 
+0

谢谢,我不知道“array_intersect”。 – 2012-08-08 16:50:51

+0

不客气 – 2012-08-08 16:51:41

0

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

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

0

事情是这样的:

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

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

这里是working demo

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