7

我正在尝试获取大于的数组值计数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);
//                                    ^                  ^                   ^

这些都不起作用。你能告诉我如何在这里包含一个变量吗?

4

1 回答 1

19

捕获父值的语法可以function .. use在“示例 #3 从父范围继承变量”下的文档中找到。

..从父范围继承变量[需要'use'形式并且]使用全局变量不同..闭包的父范围是声明闭包的函数(不一定是调用它的函数从)。

在 的帮助下转换原始代码use是:

$n = 5;
array_reduce($arr, function ($a, $b) use ($n) {
    return ($b > $n) ? ++$a : $a;
});

$n从外部词法范围“使用”在哪里。

注意:在上面的示例中,提供了值的副本,并且变量本身未绑定。请参阅有关使用对变量的引用(例如&$n)以能够并重新分配给父上下文中的变量的文档。

于 2014-08-07T11:53:07.733 回答