我有两个不同大小的数组,当两个项目相同时,我想做一些动作。
我的数组可能看起来像这样
array_1 = { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' }
array_2 = { 'key2' => 'value2' }
在上面的示例中,我想在找到array_1的key2和array_2的key2时执行操作。
目前我正在使用2个foreach循环来执行此操作。像这样:
foreach ($block->getSettingsNoDefaults() as $baseKey => $value) {
$found = false;
foreach ($blockData->settings as $saveKey => $value) {
if($baseKey == $saveKey) {
$found = true;
break;
}
}
if(!$found) {
$block->removeSetting($baseKey);
}
}
有没有办法使用其他更优雅的方法来执行这两个foreach循环的插入来比较一个数组中的所有值到第二个数组中的所有值,然后在它们匹配时起作用?
我首先想到使用php的array_map(“myfunction”,$ array_1,$ array_2)来执行此操作,但在我的情况下它似乎不是正确的函数,因为它将循环遍历两个数组并且仅比较位于相同的指数。
我可以在我的情况下使用其他任何功能,这样我就可以使用多个forloops使我的代码更加精致。
答案 0 :(得分:3)
您可以使用array_key_exists和一个foreach循环。
<强>解决方案强>
$array_1 = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' ];
$array_2 = [ 'key2' => 'value2' ];
foreach($array_2 as $key => $item){
if(array_key_exists($key, $array_1)){
echo "Match found.";
}
}
更新的答案我发现您可以使用array_intersect_key($ a1,$ a2)
$array_1 = array('key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3');
$array_2 = array('key2' => 'value2' );
$result = array_intersect_key($array_1,$array_2);
print_r($result);