2013-02-27 85 views
3

这里是我的数组:如何过滤来自其他阵列的匹配数组键的数组?

$not_wanted = array('example1', 'example2'); 

$from_this_array= array(

'example1'=>'value1', 
'example2'=>'value2', 
'should_stay'=>'value3' 

) 

末我应该有

array('should_stay'=>'value3') 

什么,我一直在努力,但它有一个疾病

public function aaData($array){ 
    $aaData =array(); 
    foreach ($array as $key=>$item){   
     if(array_key_exists($key, $this->unset_array)){ 
      unset($array[$key]); 
      $aaData[] = $item; 
     } 
    } 
    var_dump($aaData); 
    return $aaData; 
} 
+0

RTLM:http://php.net/foreach – 2013-02-27 22:11:15

回答

2

一个可行的方法:

$not_wanted = array('example1', 'example2'); 
$from_this_array= array(
    'example1'=>'value1', 
    'example2'=>'value2', 
    'should_stay'=>'value3' 
); 

print_r(array_diff_key(
    $from_this_array, array_flip($not_wanted))); 

Demo

请注意array_diff在这里是不相关的,因为它检查值,而不是键。由于您的第一个($not_wanted)数组包含值,因此应将其翻转(变成散列)以使用array_diff_key

+0

+1巧妙的回答。 – kapa 2013-02-27 22:16:37

+0

非常感谢您的帮助!标记为在4分钟内被接受 – fefe 2013-02-27 22:19:20

1

只是为了记录在案,这里是你的代码的工作版本:

function aaData($array){ 
    $aaData =array(); 
    foreach ($array as $key=>$item){   
     if(!in_array($key, $this->unset_array)){ 
      $aaData[$key] = $item; 
     } 
    } 
    var_dump($aaData); 
    return $aaData; 
} 

您使用的存储应排除在外的按键阵列上array_key_exists - 但这阵中,他们的价值观,不是钥匙,所以你需要in_array()。同样,在原始数组上执行unset()也没有意义,因为您只会返回修改后的数组。

Demo

+0

是的,我知道是一个坏的方法,我在做什么,谢谢你! – fefe 2013-02-27 22:24:38

0

只要做到:

foreach ($from_this_array as $key => $val) { 
    if (in_array($key, $not_wanted)) { 
     unset($from_this_array[$key]); 
    } 
} 

working demo

0
function aaData($array, $not_wanted){ 
    foreach ($not_wanted as $key){   

    if(isset($array[$key])){ 
     unset($array[$key]); 
    } 
} 
return $array; 
} 

$not_wanted = array('example1', 'example2'); 

$array= array(

'example1'=>'value1', 
'example2'=>'value2', 
'should_stay'=>'value3' 

); 

print_r(aaData($array, $not_wanted)); 
相关问题