Я знакомлюсь с анонимной функцией и замыканиями в 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;
};
Как передать множитель функции anon? Или, если это должно быть закрытие, как это может быть сделано.
Потому что следующее дает мне ошибку:
array_walk_recursive($array, $callback(5))
Я знаю, что у array_walk есть дополнительный параметр $ user_data, который можно передать, но он мне нужен с функцией замыкания или анона.
Закрытия 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
может получать нестатические значения, такие как аргумент запроса или результат вычисления. Просто убедитесь, что для проверки и введите приведение, чтобы гарантировать числовое значение.
Вы можете использовать два варианта:
$mltpl = 10;
$callback = function(&$value, $key)
{
global $mltpl;
$value = $key*$value*$mltpl;
};
Или же
$mltpl = 10;
$callback = function(&$value, $key) use ($mltpl)
{
$value = $key*$value*$mltpl;
};