Как я могу включить переменную в функцию обратного вызова?
Я пытаюсь получить количество значений массива больше, чем n
,
я использую array_reduce()
вот так:
$arr = range(1,10);
echo array_reduce($arr, function ($a, $b) { return ($b > 5) ? ++$a : $a; });
Это печатает количество элементов в массиве больше, чем жестко 5
просто хорошо.
Но как я могу сделать 5
переменная как $n
?
Я попытался ввести третий аргумент, как это:
array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; });
// ^ ^
И даже
array_reduce($arr, function ($a, $b, $n) { return ($b > $n) ? ++$a : $a; }, $n);
// ^ ^ ^
Ни одна из этих работ. Можете ли вы сказать мне, как я могу включить переменную здесь?
1 ответ
Синтаксис для захвата родительских значений можно найти в function .. use
документация в разделе "Пример №3. Наследование переменных из родительской области".
.. Наследование переменных из родительской области видимости [требует формы 'use' и] не то же самое, что использование глобальных переменных. Родительская область видимости замыкания - это функция, в которой было объявлено замыкание (не обязательно функция, которую оно вызывало от).
Преобразование исходного кода с помощью use
, затем:
$n = 5;
array_reduce($arr, function ($a, $b) use ($n) {
return ($b > $n) ? ++$a : $a;
});
куда $n
"используется" из внешней лексической области.
ПРИМЕЧАНИЕ. В приведенном выше примере предоставляется копия значения, а сама переменная не привязана. См. Документацию по использованию ссылки на переменную (например, &$n
) иметь возможность и переназначать переменным в родительском контексте.