Tengo el siguiente código:
function lower_than_10($i) {
return ($i < 10);
}
que puedo usar para filtrar una matriz como esta:
$arr = array(7, 8, 9, 10, 11, 12, 13);
$new_arr = array_filter($arr, 'lower_than_10');
¿Cómo puedo agregar argumentos a lower_than_10 para que también acepte el número para verificar? Como, si tengo esto:
function lower_than($i, $num) {
return ($i < $num);
}
¿Cómo llamarlo desde array_filter pasando 10 a $ num o cualquier número?
array_filter
. Es simplemente uncallable
; en el caso anterior que coincide con "Tipo 3: llamada al método de objeto":,array(<instance>, <method-name>)
cf. PHP: Callbacks / Callables - Manual .si usa php 5.3 y superior, puede usar el cierre para simplificar su código:
fuente
use
palabra para proporcionar parámetros adicionales a la lambda. ¡Gracias por una pista tan valiosa! :)En PHP 5.3 o superior, puede usar un cierre :
fuente
create_function()
.create_function()
es básicamenteeval()
con otro nombre, y es igual de malvado. Se debe desalentar su uso. La extraña solución basada en clases que se proporciona en la respuesta aceptada es una mejor solución que usarcreate_function()
en este caso.si necesita que se pasen varios parámetros a la función, puede agregarlos a la declaración de uso usando ",":
fuente
En extensión a la respuesta de jensgram , puede agregar un poco más de magia usando el
__invoke()
método mágico.Esto te permitirá hacer
fuente
Esto le permite filtrar elementos en matrices multidimensionales:
fuente