回调函数array_filter()
仅传递数组的值,而不传递键。
如果我有:
$my_array = array("foo" => 1, "hello" => "world");
$allowed = array("foo", "bar");
删除数组中所有$my_array
不在其中的键的最佳方法是$allowed
什么?
所需的输出:
$my_array = array("foo" => 1);
PHP
5.6引入了第三个参数array_filter()
,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']
问题内容: 给定以下数组 当我运行时,由于它不是递归的,所以会得到结果。 也不会这样做,因为我实际上需要递归运行,然后计算其结果。 所以我的问题是:在这种情况下如何递归运行?我的预期结果是。 请注意,我没有使用任何回调,因此可以排除false,null和empty。 问题答案: 应该管用 或许 肯定还有更多可能的解决方案。如果你想使用(没有回调)记住,它把为过,因此它会 删除 任何从数组-值。 如
问题内容: 我有以下代码: 我可以用来过滤这样的数组: 我如何在lower_than_10中添加参数,以便它也接受要检查的数字?喜欢,如果我有这个: 如何从array_filter调用它传递10到$ num或任何数字? 问题答案: 作为@Charles使用闭包的解决方案]的替代方法,您实际上可以在文档页面的注释中找到示例。 这个想法是您创建一个具有所需状态()和回调方法(作为参数)的对象: 用法(
问题 你想要根据布尔条件来筛选数组。 解决方案 使用 Array.filter (ECMAScript 5): array = [1..10] array.filter (x) -> x > 5 # => [6,7,8,9,10] 在 EC5 之前的实现中,可以通过添加一个筛选函数扩展 Array 的原型,该函数接受一个回调并对自身进行过滤,将回调函数返回 true 的元素收集起来。 # 扩展 A
我有一个返回字符串[][]的方法,如下所示: 我做错了什么?
我希望筛选Pandas Dataframe以从两种不同类型的属性中选择数据: 但是我不能使用这个选项,或者为此,你能给我一个如何做的例子吗。
我正在为一个数组做一个搜索函数。我有一个输入[文本],例如,我把'ban',然后我需要所有以'ban'开头的结果显示出来,例如香蕉,香蕉奶昔,香蕉(油炸),等等。 我该怎么做呢?我试过了,但每次都不准确。我试过的在下面。 我有一个非常接近,但当我键入“ban”时,它出现了“aardbei”。这显然是错误的。在这里,也许我忽略了什么?