我有以下代码
function MaximArray($arr)
{
$GLOBALS['maxim'] = 0;
array_walk_recursive($arr,create_function('$item,$key','if($item > $GLOBALS["maxim"]) $GLOBALS["maxim"] = $item;'));
return $GLOBALS['maxim'];
}
为什么这个函数适用于$ GLOBALS ['maxim'],但是如果我将一个变量声明为全局内部函数并使用它,则不起作用?我了解到$ GLOBALS ['a']和全球$ a相等。
全局变量$ maxim的示例:
$maxim=0;
function MaximArray($arr)
{
global $maxim;
array_walk_recursive($arr,create_function('$item,$key','if($item > $maxim) $maxim = $item;'));
return $maxim;
}
答案 0 :(得分:0)
假设您使用的是PHP 5.3,则可以使用正确的内联函数,而不是使用笨重的旧create_function()
语法。
array_walk_recursive($arr,function($item,$key) use $maxim {if($item > $maxim) $maxim = $item;}));
注意use $maxim
位 - 此语法允许您将局部变量传递给内联函数。使用create_function()
无法做到这一点。
正如我所说,这适用于PHP 5.3及更高版本。如果您使用的是PHP 5.2或更早版本,那么您将无法使用上述语法。但是,由于PHP 5.2在三年前被宣布为生命终止,如果是这种情况,那么你应该紧急考虑升级。