如何从另一个数组中匹配数组键上的数组?

时间:2013-02-27 22:08:58

标签: php arrays

以下是我的数组:

$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;
}

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

只是做:

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

请参阅working demo

答案 3 :(得分: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));