2013-02-27 86 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)); 
相關問題