У меня такой код:
function lower_than_10($i) {
return ($i < 10);
}
который я могу использовать для фильтрации такого массива:
$arr = array(7, 8, 9, 10, 11, 12, 13);
$new_arr = array_filter($arr, 'lower_than_10');
Как я могу добавить аргументы в lower_than_10, чтобы он также принимал число для проверки? Мол, если есть такое:
function lower_than($i, $num) {
return ($i < $num);
}
как вызвать его из array_filter, передав от 10 до $ num или любого другого числа?
array_filter
? Это простоcallable
; в приведенном выше случае соответствие «Тип 3: вызов метода объекта»:,array(<instance>, <method-name>)
ср. PHP: Обратные вызовы / Callables - Руководство .если вы используете php 5.3 и выше, вы можете использовать закрытие для упрощения кода:
источник
use
слово для предоставления лямбда дополнительных параметров. Спасибо за такой ценный совет! :)В PHP 5.3 или выше вы можете использовать закрытие :
источник
create_function()
.create_function()
в основномeval()
имеет другое имя и столь же злой. Его использование не рекомендуется. Дурацкий обходной путь на основе классов, приведенный в принятом ответе, является лучшим решением, чем использованиеcreate_function()
в этом случае.если вам нужно передать в функцию несколько параметров, вы можете добавить их к оператору use, используя ",":
источник
В расширении ответа jensgram вы можете добавить еще немного магии, используя
__invoke()
магический метод.Это позволит вам сделать
источник
Это позволяет фильтровать элементы в многомерных массивах:
источник