2017-11-08 7 views
1

サイズが異なる2つの配列があり、2つのアイテムが等しい場合に何らかのアクションを実行したい。私はarray_2からarray_1とKEY2からKEY2が見つかったときにアクションを実行する上で異なるサイズの2つの配列をループし、等しいアイテムを見つける

私の配列は一例で、この

array_1 = { 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3' } 
array_2 = { 'key2' => 'value2' } 

のように見えることがあります。

現在、私はこれを行うために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); 
     } 
    } 

2つのforeachのこのINSEADを行うには、いくつかの他のよりエレガントな方法を使用する方法はありますが二番目の配列からすべての値に1つの配列からすべての値を比較し、両者が一致するならば、行動するループ?

私はphpのarray_map( "myfunction"、$ array_1、$ array_2)を使ってこれを行うことを考えましたが、どちらの配列をループして、同じインデックスで

私のケースで使用できる他の機能はありますか?そうすれば、複数のforloopsを使用してコードをより魅力的にすることができます。

+0

だからあなたは、具体的であれば2つのオブジェクトを見つけるためにしようとしています同じキーを共有するか、単に2つのオブジェクトの長さを比較すれば十分でしょうか? –

+0

共有キーが同じキーを持っていて、それに対処するならば:) –

答えて

3

array_key_existsと1つのforeachループを使用できます。

私はあなたがarray_intersect_key($ A1、$ A2を)使用することができることを見出した回答を更新しました

ソリューション

$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_1 = array('key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'); 
$array_2 = array('key2' => 'value2'); 
$result = array_intersect_key($array_1,$array_2); 
print_r($result); 
+0

これは素晴らしいものです。 :) –

+0

ありがとうございます! –

+0

foreachループを使用せずに私の更新された答えを見てください:) – Bluetree

関連する問題