2010-07-22 50 views
2

我要檢查,如果一個陣列包含在第二陣列, 但同樣的密鑰和相同的值中,比較數組:一個陣列被包含在所述第二陣列(密鑰+值)

(不需要是相等的,只有檢查所有在一個數組中的鍵和值是第二)

,我做直到現在簡單的事情是:

function checkSameValues($a, $b){ 

     foreach($a as $k1 => $v1){         
      if($v1 && $v1 != $b[$k1]){ 
       return false; 
       break;          
      } 
     } 
     return true; 
    } 

是否有一個更簡單的(快)方法來檢查這個?

感謝

回答

3

我會做

$array1 = array("a" => "green", "b" => "blue", "c" => "white", "d" => "red"); 
$array2 = array("a" => "green", "b" => "blue", "d" => "red"); 
$result = array_diff_assoc($array2, $array1); 
if (!count($result)) echo "array2 is contained in array"; 
0
function checkSameValues($a, $b){ 
    if (in_array($a,$b)) return true; 
    else return false; 
} 
+0

我需要檢查相同的密鑰和相同的值,in_array只檢查值! – 2010-07-22 12:37:23

1

關於...

$intersect = array_intersect_assoc($a, $b); 
if(count($intersect) == count($b)){ 
    echo "yes, it's inside"; 
} 
else{ 
    echo "no, it's not."; 
} 

array_intersect_assoc array_intersect_assoc()返回一個包含存在於所有的參數的ARRAY1的所有值的數組。

+0

對我來說工作不一樣,我得到不同的結果 – 2010-07-22 12:40:33

+0

我修改並測試了它...它適用於我。 – Cristian 2010-07-22 12:44:08

0

這顯然只檢查深度= 1,但可以很容易地適應遞歸:

// check if $a2 is contained in $a1 
function checkSameValues($a1, $a2) 
{ 
    foreach($a1 as $element) 
    { 
     if($element == $a2) return true; 
    } 
    return false; 
} 

$a1 = array('foo' => 'bar', 'bar' => 'baz'); 
$a2 = array('el' => 'one', 'another' => $a1); 

var_dump(checkSameValues($a2, $a1)); // true