2012-08-08 73 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; 
      } 
     } 

相關問題