1

我有三个数组:

$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

4 回答 4

5

也许

<?php

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

?>

更短是的,更快不知道:)

来自@deceze 的更新

<?php 

array_diff_key($arr_1, $arr_11);

?>
于 2012-11-27T13:51:38.863 回答
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

请注意,虽然您可能没有自己编写循环,但不可避免地任何类型的数组中键的搜索都会涉及到一个。

于 2012-11-27T13:52:05.800 回答
0

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

$found_missing_key = false
$keys = array_keys($array1);
foreach($keys as $key) {
    if(!isset($array2[$key])) {
        $found_missing_key = true;
        break;
    }
}
于 2012-11-27T13:56:19.910 回答
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;
}
于 2012-11-27T13:52:12.603 回答