PHP密钥存在于数组中

时间:2012-11-27 13:49:36

标签: php arrays

我有三个阵列:

$arr_1 = array('a'=>1,'b'=>2);  
$arr_11 = array('a'=>1, 'd'=>4);  
$arr_2 = array('a'=>'aaa','b'=>'bbb', 'c'=>'ccc');  

我想检查$ arr_1中的所有密钥是否都存在于$ arr_2中。

someFunction($arr_1,$arr_2); //return true  
someFunction($arr_11,$arr_2); //return false 

我知道如何用“foreach”循环来做到这一点 还有更好的方法吗?

4 个答案:

答案 0 :(得分:5)

也许

<?php

array_diff(array_keys($arr_1), array_keys($arr_11));

?>

更短的是,更快的dunno:)

从@deceze更新

<?php 

array_diff_key($arr_1, $arr_11);

?>

答案 1 :(得分:0)

以下是另一种方法,用于检查$arr1中是否存在$arr2中的所有密钥:

function check($v){
    return array_key_exists($v,$arr_2);
}
count(array_filter(array_keys($arr_1),"check")) == count($arr_1); // true

请注意,虽然您可能没有自己编写循环,但不可避免地会在数组中搜索任何类型的密钥。

答案 2 :(得分:0)

自己写someFunction,并在里面使用循环。循环和array_key_exists是这样做的方法,但如果将它包装在一个函数中,你可以保存自己将来再次使用它。

<强>更新

function arrayKeyCompare($control, $variable) {
    foreach (array_keys($control) as $key) {
        if (!array_key_exists($key, $variable)) return false;
    }

    return true;
}

答案 3 :(得分:0)

您可以在while循环中使用array_key_exists()isset()

$found_missing_key = false
$keys = array_keys($array1);
foreach($keys as $key) {
    if(!isset($array2[$key])) {
        $found_missing_key = true;
        break;
    }
}