PHP array_filter中的未定义变量

Mul*_*tut 3 php array-filter

这可能是一个非常愚蠢的问题,但我无法理解PHP范围如何处理这段代码:

$leagueKey = 'NFL';
$response['response'] = array_filter($response['response'], function($tier){
    return ($tier['LeagueKey'] === $leagueKey ? true : false);
});
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到一个"Undefined variable:leagueKey"异常.另一方面,这非常有效:

$response['response'] = array_filter($response['response'], function($tier){
    return ($tier['LeagueKey'] === 'NFL' ? true : false);
});
Run Code Online (Sandbox Code Playgroud)

为什么PHP不能在array_filter函数中看到我的$ leagueKey变量?

谢谢!

Sco*_*pey 20

您的$leagueKey变量超出了匿名函数(闭包)的范围.幸运的是,PHP提供了一种将变量放入范围的非常简单的方法 - use关键字.尝试:

$leagueKey = 'NFL';
$response['response'] = array_filter($response['response'], function($tier) use ($leagueKey) {
    return $tier['LeagueKey'] === $leagueKey;
});
Run Code Online (Sandbox Code Playgroud)

这只是告诉你的匿名函数"使用" $leagueKey当前范围内的变量.


Gan*_*ame 5

尝试这个

$response['response'] = array_filter($response['response'], function($tier) use ($leagueKey) {
 return ($tier['LeagueKey'] === $leagueKey ? true : false); 
}); 
Run Code Online (Sandbox Code Playgroud)