基本上我想做类似这样的事情:
$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);
这真的可能吗?在匿名函数外计算一个变量并在函数内使用它?
基本上我想做类似这样的事情:
$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);
这真的可能吗?在匿名函数外计算一个变量并在函数内使用它?
您可以使用use
关键字从父作用域继承变量。在您的示例中,您可以执行以下操作:
$callback = function($val) use ($avg) { return $val < $avg; };
了解更多信息,请查看匿名函数的手册页面。
如果您正在运行PHP 7.4或更高版本,则可以使用箭头函数。箭头函数是定义匿名函数的另一种更简洁的方式,它自动捕获外部变量,消除了对use
的需要:
$callback = fn($val) => $val < $avg;
考虑到箭头函数的简洁性,你可以合理地将它们直接写在 array_filter
调用中:
return array_filter($arr, fn($val) => $val < $avg);
使用全局变量,例如$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);
use
足以满足需求。 - Eduard Sukharev
$listOfValLessThanAvg = []; $callback = function($val) use ($avg, &$listOfValLessThanAvg) { if( $val < $avg) array_push($listOfValLessThanAvg, $val); };
- pravin$GLOBALS
,但显然不行。看到了这个答案。简直完美。 - JustCarty