Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用外部计算的变量的回调函数_Php_Anonymous Function - Fatal编程技术网

Php 使用外部计算的变量的回调函数

Php 使用外部计算的变量的回调函数,php,anonymous-function,Php,Anonymous Function,基本上我想这样做: $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=阵列总和($arr)/计数($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);
$arr=[1,2,3,4,5,6,7,8,9,10];
$avg=阵列总和($arr)/计数($arr);
$callback=函数($val){return$val<$avg};
返回数组\过滤器($arr,$callback);

这真的可能吗?在匿名函数外部计算变量并在内部使用它?

使用全局变量,即$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);
$arr={1,2,3,4,5,6,7,8,9,10};
$GLOBALS['avg']=数组总和($arr)/计数($arr);
$callback=function($val){return$val<$GLOBALS['avg']};
$returnarray\u filter($arr,$callback);

您可以使用
use
关键字从父范围继承变量。在您的示例中,您可以执行以下操作:

$callback = function($val) use ($avg) { return $val < $avg; };
考虑到箭头函数的简洁性,您可以合理地直接在
array\u filter
调用中编写它们:

return array_filter($arr, fn($val) => $val < $avg);
返回数组\u过滤器($arr,fn($val)=>$val<$avg);

非常感谢。我看了手册页面,但在代码示例中遗漏了该关键字。你救了我一天!简单而有用的只是添加到上面的答案中,父范围变量被复制,而不是在回调函数中可用。如果需要操纵父参数,则应发送一个引用,如下所示$callback=function($val)use($avg,&$listOfValLessThanAvg){if($val<$avg)array_push($listOfValLessThanAvg,$val);}绞尽脑汁想怎么做。首先想到的是
$GLOBALS
,但显然这是不可能的。我想到了这个答案。绝对完美。全局变量被认为是不好的做法。此外,在这里使用全局变量是一种过分的杀伤力,因为
use
就足够了。全局变量是邪恶的!
return array_filter($arr, fn($val) => $val < $avg);