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

4 回答 4

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)));

演示

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

于 2013-02-27T22:13:49.790 回答
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(),因为您只会返回修改后的数组。

演示

于 2013-02-27T22:19:49.083 回答
0

做就是了:

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

查看工作演示

于 2013-02-27T22:20:17.047 回答
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));
于 2013-02-27T22:22:38.630 回答