循环遍历两个不同大小的数组并找到相等的项

时间:2017-11-08 02:10:23

标签: php

我有两个不同大小的数组,当两个项目相同时,我想做一些动作。

我的数组可能看起来像这样

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使我的代码更加精致。

1 个答案:

答案 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);