array_walk 具有匿名函数
array_walk with anonymous function
我越来越熟悉 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 可以传递,但我需要它带有闭包或匿名函数。
您可以使用两个选项:
$mltpl = 10;
$callback = function(&$value, $key)
{
global $mltpl;
$value = $key*$value*$mltpl;
};
或
$mltpl = 10;
$callback = function(&$value, $key) use ($mltpl)
{
$value = $key*$value*$mltpl;
};
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
可以接收非静态值,例如查询参数或计算结果。只需确保验证并键入强制转换以保证数值。
我越来越熟悉 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 可以传递,但我需要它带有闭包或匿名函数。
您可以使用两个选项:
$mltpl = 10;
$callback = function(&$value, $key)
{
global $mltpl;
$value = $key*$value*$mltpl;
};
或
$mltpl = 10;
$callback = function(&$value, $key) use ($mltpl)
{
$value = $key*$value*$mltpl;
};
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
可以接收非静态值,例如查询参数或计算结果。只需确保验证并键入强制转换以保证数值。