这是匿名函数可见的变量,也是主函数。我问因为array_walk_recursive只允许一个额外的参数,能够从匿名函数到达某些变量而不依赖于常量压缩和提取
会很好答案 0 :(得分:3)
关闭可以:
function() use ($var) { /*code*/}
使用use(vars)
关闭函数中的这些变量。
无法发布官方使用文档的链接,因为php.net缺少
答案 1 :(得分:1)
如果要将多个参数传递给array_walk_recursive
,请将它们作为数组传递:
array_walk_recursive($data, 'callbackFn', array('arg1', new Foo, $bar));
在回调中,您可以通过数组索引访问每个附加参数。
示例(demo)
$data = range(1, 10);
array_walk_recursive(
$data,
function(&$value, $key, $args)
{
$value = $value * $args[0] * $args[1] * $args[2];
},
array(3, 6, 7)
);
print_r($data);
答案 2 :(得分:-1)
通过__invoke
将对象用作函数可以是闭包的有用替代方法:
<?php
class Walker
{
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function __invoke($val, $key)
{
if ($val == $this->a || $val == $this->b)
echo "$key\n";
}
}
$a = array('the', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog');
array_walk($a, new Walker('quick', 'dog'));
显然它更冗长,但当你做的不仅仅是一个简单的任务时,它可以更容易理解。