如何根据另一个数组的键来过滤数组?

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

RTLM: http://php.net/foreach - Marc B
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


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()没有意义,因为您只会返回修改后的数组。

演示


是的,我知道我之前的做法很糟糕,也感谢你指出来! - fefe

0

只需这样做:

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

请查看工作演示


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接