array_filter()
中的回调函数只传入数组的值,而不是键。
如果我有:
$my_array = array("foo" => 1, "hello" => "world");
$allowed = array("foo", "bar");
删除 $my_array
中所有不在 $allowed
数组中的键的最佳方法是什么?
期望的输出:
$my_array = array("foo" => 1);
原文由 maček 发布,翻译遵循 CC BY-SA 4.0 许可协议
PHP 5.6 向
array_filter()
,flag
引入了第三个参数,您可以将其设置为ARRAY_FILTER_USE_KEY
以通过键而不是值过滤:由于 PHP 7.4 引入了箭头函数,我们可以使它更简洁:
显然这不像
array_intersect_key($my_array, array_flip($allowed))
那样优雅,但它确实提供了对密钥执行任意测试的额外灵活性,例如$allowed
可以包含正则表达式模式而不是普通字符串。您还可以使用
ARRAY_FILTER_USE_BOTH
将值和键都传递给您的过滤器函数。这是一个基于第一个的人为示例,但请注意,我不建议这样使用$allowed
编码过滤规则: