J'ai le code suivant:
function lower_than_10($i) {
return ($i < 10);
}
que je peux utiliser pour filtrer un tableau comme celui-ci:
$arr = array(7, 8, 9, 10, 11, 12, 13);
$new_arr = array_filter($arr, 'lower_than_10');
Comment puis-je ajouter des arguments à lower_than_10 pour qu'il accepte également le nombre à vérifier? Comme, si j'ai ceci:
function lower_than($i, $num) {
return ($i < $num);
}
comment l'appeler de array_filter en passant 10 à $ num ou n'importe quel nombre?
array_filter
? C'est simplement uncallable
; dans le cas ci-dessus correspondant à "Type 3: Appel de méthode objet"array(<instance>, <method-name>)
:, cf. PHP: Callbacks / Callables - Manuel .si vous utilisez php 5.3 et supérieur, vous pouvez utiliser la fermeture pour simplifier votre code:
la source
use
mot pour fournir au lambda des paramètres supplémentaires. Merci pour un si précieux indice! :)En PHP 5.3 ou supérieur, vous pouvez utiliser une fermeture :
la source
create_function()
.create_function()
est fondamentalementeval()
avec un autre nom, et est tout aussi mauvais. Son utilisation doit être découragée. La solution de contournement farfelue basée sur les classes donnée dans la réponse acceptée est une meilleure solution que l'utilisationcreate_function()
dans ce cas.si vous avez besoin de plusieurs paramètres à transmettre à la fonction, vous pouvez les ajouter à l'instruction use en utilisant ",":
la source
En extension de jensgram answer, vous pouvez ajouter un peu plus de magie en utilisant la
__invoke()
méthode magique.Cela vous permettra de faire
la source
Cela vous permet de filtrer les éléments dans des tableaux multidimensionnels:
la source