2015-09-06 267 views
2

我越来越熟悉PHP匿名函数和闭包,我需要使用闭包或匿名函数传递给array_walk但在这里的附加参数是一个简单的代码块:array_walk匿名函数

 $array = array(1, 2, 3, 4, 5, array(1, 2)); 

     $callback = function(&$value, $key) 
     { 
      $value = $key*$value; 
     }; 

     var_dump($array, array_walk_recursive($array, $callback), $array); 

这是非常简单的,因为它不过是说我想改变功能如下:

 $callback = function(&$value, $key, $multiplier) 
     { 
      $value = $key*$value*$multiplier; 
     }; 

如何传递乘数的匿名函数?或者,如果它应该是一个封闭,它怎么能做到。

因为如下是给我的错误:

array_walk_recursive($array, $callback(5)) 

我知道array_walk有一个额外的PARAM $ USER_DATA可以通过,但我需要它具有关闭或匿名函数。

回答

3

PHP的闭包可以被用于此:

<?php 
$array = array(1, 2, 3, 4, 5, array(1, 2)); 
$multiplier = 5; 

$callback = function(&$value, $key) use ($multiplier) { 
    $value = $key*$value*$multiplier; 
}; 

var_dump($array, array_walk_recursive($array, $callback), $array); 

显然$multiplier可以接收非静态值,如ta查询参数或结果o计算。只要确保验证并输入cast以保证数值。

+0

谢谢。正是我需要的! – Combinu

1

您可以使用两个选项:

$mltpl = 10; 
$callback = function(&$value, $key) 
{ 
    global $mltpl; 
    $value = $key*$value*$mltpl; 
}; 

或者

$mltpl = 10; 
$callback = function(&$value, $key) use ($mltpl) 
{ 
    $value = $key*$value*$mltpl; 
}; 
+0

感谢您的帮助。解决了! – Combinu