array_walk с анонимной функцией

Я знакомлюсь с анонимной функцией и замыканиями в 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, который можно передать, но он мне нужен с функцией замыкания или анона.

2

Решение

Закрытия 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 может получать нестатические значения, такие как аргумент запроса или результат вычисления. Просто убедитесь, что для проверки и введите приведение, чтобы гарантировать числовое значение.

3

Другие решения

Вы можете использовать два варианта:

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

Или же

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

По вопросам рекламы [email protected]