65 votes

Fonction de rappel utilisant des variables calculées en dehors d'elle

En gros, j'aimerais faire quelque chose comme ça :

$arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$avg = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $avg };

return array_filter($arr, $callback);

Est-ce vraiment possible ? Calculer une variable en dehors de la fonction anonyme et l'utiliser à l'intérieur ?

166voto

mfonda Points 4507

Vous pouvez utiliser le use pour hériter des variables de la portée parent. Dans votre exemple, vous pourriez faire ce qui suit :

$callback = function($val) use ($avg) { return $val < $avg; };

Pour plus d'informations, voir la page du manuel sur fonctions anonymes .

Si vous utilisez PHP 7.4 ou une version ultérieure, fonctions de la flèche peuvent être utilisées. Les fonctions fléchées sont un moyen alternatif et plus concis de définir des fonctions anonymes, qui capturent automatiquement les variables externes, éliminant ainsi le besoin de recourir aux fonctions use :

$callback = fn($val) => $val < $avg;

Compte tenu de la concision des fonctions flèches, vous pouvez raisonnablement les écrire directement dans le fichier array_filter appeler :

return array_filter($arr, fn($val) => $val < $avg);

-7voto

Viper_Sb Points 1435

Utiliser des variables globales, par exemple $GLOBAL['avg'].

$arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
$GLOBALS['avg'] = array_sum($arr) / count($arr);
$callback = function($val){ return $val < $GLOBALS['avg'] };

$return array_filter($arr, $callback);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X