1

私は3つの配列を持っています:

$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));

?>

短いはい、速いdunno :)

@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

自分で書い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 に答える
0

array_key_exists()またはisset()whileループで使用できます。

$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 に答える