在PHP中从数组中删除黑名单键

时间:2012-06-14 04:45:34

标签: php arrays key

我有一个关联的数据数组,我有一个我希望从该数组中删除的键数组(同时保持原始顺序中的其余键 - 而不是这可能是一个约束)。

我正在寻找一个 一行 的php来做到这一点。
我已经知道如何循环遍历数组,但似乎应该有一些array_map unsetarray_filter解决方案在我掌握之外。

我搜索了一下,但没有发现任何简洁。

要明确这是 一行 中的问题:

//have this example associative array of data
$data = array(
    'blue'   => 43,
    'red'    => 87,
    'purple' => 130,
    'green'  => 12,
    'yellow' => 31
);

//and this array of keys to remove
$bad_keys = array(
    'purple',
    'yellow'
);

//some one liner here and then $data will only have the keys blue, red, green

3 个答案:

答案 0 :(得分:101)

$out = array_diff_key ($data, array_flip ($bad_keys));

我所做的就是查看Array functions列表,直到找到我需要的那个(_diff_key)。

答案 1 :(得分:17)

解决方案确实是the one provided by Niet the Dark Absol。我想为任何追求类似事物的人提供另一个类似的解决方案,但是这个使用白名单而不是黑名单

$whitelist = array( 'good_key1', 'good_key2', ... );
$output = array_intersect_key( $data, array_flip( $whitelist ) );

这将保留$whitelist数组中的键并删除其余部分。

答案 2 :(得分:0)

这是我为关联数组创建的黑名单功能。

 ' '.join([a for a in re.split(ur'([\p{Lu}][\p{Ll}]+)', ''.join(entity)) if a])