2017-02-09 8 views
0
  $myarray = Array 
      (
       [6] => Array 
        (
         [id] => 84 
         [Name] => Confirm Mailing of SSDI App 
         [CaseId] => 0 
        ) 

       [10] => Array 
        (
         [id] => 17 
         [Name] => Upload Fee Agreement (signed) 
         [CaseId] => 0 
        ) 

       [11] => Array 
        (
         [id] => 41 
         [Name] => Upload 827 (1st) (signed) 
         [CaseId] => 0 
        ) 

       [12] => Array 
        (
         [id] => 39 
         [Name] => Upload 3288 (signed) 
         [CaseId] => 0 
        ) 

       [13] => Array 
        (
         [id] => 37 
         [Name] => Upload 16-F6 sig page (signed) 
         [CaseId] => 0 
        ) 

       [14] => Array 
        (
         [id] => 38 
         [Name] => Upload 8001-BK sig page (signed) 
         [CaseId] => 0 
        ) 

      ) 

私は上記のようにマスター配列と以下のようなもう一つの配列を有する別の配列に見出さサブアレイキー値が設定解除アレイ

  $anotherarray = Array 
      (
       [1] => 41 
       [2] => 39 
       [3] => 37 
      ) 

Iは、マスター配列から解除する必要がある場合はそのIDの一致forループなしで、私に最高の解決策を教えてください。

たとえば$anotherarrayアレイには3つのIDが41,39,37あるため、11,12,13のようなマスター配列から配列を設定解除する必要があります。

+0

'例えば$の配列AnotherArrayは3つのID 41,39,37を持っているので、私は次のようにマスター配列から設定解除のアレイに持って11,12,13。議論の余地がある。なぜ11,12,13? –

+0

なぜforループなし? –

+0

ループなしで実行できるのであれば、スクリプトには10​​k行以上があるので、パフォーマンスが向上しますので、不要なループを避けるように注意してください –

答えて

0

idとインデックスを格納するために新しい配列を使用するため、毎回配列をトラバースする必要がありません。

$keys_map = array_flip(array_map(function($v){return $v['id'];}, $array)); 
foreach($anotherarray as $v) 
{ 
    unset($array[$keys_map[$v]]); 
} 
0

試してみてください。

$myarray = array_filter($myarray, function($value) use ($anotherarray) { 
    return !in_array($value['id'], $anotherarray); 
}); 
0

はこれを試してみてください:

$arrFinal = array(); 
array_walk($myarray, function(&$value, $key) use (&$anotherarray, &$arrFinal) { 
    if(!in_array($value['id'],$anotherarray)){ 
     return $arrFinal[$key] = $value; 
    } 
}); 


print_r($arrFinal); 
関連する問題