【问题标题】:loop through two arrays with different sizes and find equal items遍历两个不同大小的数组并找到相等的项目
【发布时间】:2017-11-08 02:10:23
【问题描述】:

我有两个大小不同的数组,我想在两个项目相等时执行一些操作。

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

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。

【问题讨论】:

  • 那么,您是专门试图找出两个对象是否共享相同的键,还是仅仅比较两个对象的长度就足够了?
  • 如果共享相同的密钥,如果他们这样做了就采取行动:)

标签: php


【解决方案1】:

您可以使用 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);

【讨论】:

  • 很好,这将剃掉一个foreach,不错! :)
猜你喜欢
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2016-02-15
  • 2020-12-02
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
相关资源
最近更新 更多