【问题标题】:array_walk with anonymous function带有匿名函数的array_walk
【发布时间】:2015-12-01 23:41:53
【问题描述】:

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

【问题讨论】:

    标签: php closures anonymous-function array-walk


    【解决方案1】:

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

    【讨论】:

    • 谢谢。正是我需要的!
    【解决方案2】:

    您可以使用两个选项:

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

    或者

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

    【讨论】:

    • 感谢您的帮助。解决了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    相关资源
    最近更新 更多