2017-02-09 66 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 
      ) 

我不得不取消设置从母版阵列哪个ID匹配$another阵列,没有for循环,请帮助我最好的解决方案。

例如$anotherarray数组有三个ID 41,39,37,所以我必须从主数组中取消设置数组,如11,12,13。

+0

'例如:$ anotherarray阵列有三个ID 41,39,37,所以我不得不取消设置阵列从主阵列状11,12,13。争议。为什么11,12,13? –

+0

为什么没有for循环? –

+0

因为如果没有循环就可以完成,那么性能会更好,因为我的脚本有更多的10k行,所以要小心避免不必要的循环 –

回答

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); 
相关问题