Как я могу включить переменную в функцию обратного вызова?

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

Другие вопросы по тегам