我正在尝试获取大于n
的数组值。
我正在使用array_reduce()
:
$arr = range(1,10);
echo array_reduce($arr, function ($a, $b) { return ($b > 5) ? ++$a : $a; });
这打印出数组中元素的数量大于硬编码的5
就好了。
但是如何将5
变为$n
变量?
我尝试过引入第三个这样的论点:
array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; });
// ^ ^
甚至
array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; }, $n);
// ^ ^ ^
这些都不起作用。你能告诉我如何在这里包含一个变量吗?
答案 0 :(得分:12)
捕获父值的语法可以在“示例#3从父作用域继承变量”下的function .. use
文档中找到。
..从父作用域继承变量[需要'use'表单和] 不与使用全局变量相同..闭包的父作用域是闭包的函数被宣布(不一定是从中调用的函数)。
然后在use
的帮助下转换原始代码:
$n = 5;
array_reduce($arr, function ($a, $b) use ($n) {
return ($b > $n) ? ++$a : $a;
});
从外部词法范围“使用”$n
。
注意:在上面的示例中,提供了值的副本,并且未绑定变量本身。请参阅有关使用引用变量(例如&$n
)的文档,以便能够并在父上下文中重新分配变量。