以下是我的数组:
$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 :(得分: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()
也没有意义,因为您只会返回修改过的数组。
答案 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));