PHP如何使用array_filter()函数过滤数组键
|
回调函数array_filter()只传递数组的值,而不传递键。 有以下php代码: $my_array = array("foo" => 1,"hello" => "world"); $allowed = array("foo","bar"); 我想删除$my_array数组中的元素,该元素的键不在$allowed数组 期望输出如下: $my_array = array("foo" => 1); 该如何实现呢? 第一种方法: array_filter()函数在PHP 5.6引入了第三个参数flag,你可以设置为ARRAY_FILTER_USE_KEY通过键,而不是值来筛选: $my_array = ['foo' => 1,'hello' => 'world']; $allowed = ['foo','bar']; $filtered = array_filter( $my_array, function ($key) use ($allowed) { return in_array($key,$allowed); }, ARRAY_FILTER_USE_KEY ); 显然,这并不像array_intersect_key($my_array,array_flip($allowed))那样优雅,但它确实提供了对键执行任意测试的额外灵活性,例如$allowed可以包含正则表达式而不是普通字符串。 您还可以使用ARRAY_FILTER_USE_BOTH将值和键传递给过滤器函数。这是一个基于第一个的人为例子,但请注意,我不建议使用$allowed这种方式编码过滤规则: $my_array = ['foo' => 1,'bar' => 'baz','hello' => 'wld']; $allowed = ['foo' => true,'bar' => true,'hello' => 'world']; $filtered = array_filter( $my_array, function ($val,$key) use ($allowed) { // N.b. $val,$key not $key,$val return isset($allowed[$key]) && ( $allowed[$key] === true || $allowed[$key] === $val ); }, ARRAY_FILTER_USE_BOTH ); // ['foo' => 1,'bar' => 'baz'] 第二种方法: 使用闭包的更灵活的解决方案: $my_array = array("foo" => 1,"bar"); $result = array_flip(array_filter(array_flip($my_array),function ($key) use ($allowed) { return in_array($key,$allowed); })); var_dump($result); 输出: array(1) { 'foo' => int(1) } (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
