2

我正在熟悉 php 中的匿名函数和闭包,我需要使用闭包或 anon 函数来传递给 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 有一个额外的参数 $user_data 可以传递,但我需要一个闭包或匿名函数。

4

2 回答 2

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可以接收非静态值,例如查询参数或计算结果。只需确保验证并键入强制转换以保证数值。

于 2015-09-06T08:17:22.833 回答
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;
};
于 2015-09-06T08:12:33.093 回答