Php $GLOBALS数组\u walk\u递归
我有以下代码Php $GLOBALS数组\u walk\u递归,php,globals,Php,Globals,我有以下代码 function MaximArray($arr) { $GLOBALS['maxim'] = 0; array_walk_recursive($arr,create_function('$item,$key','if($item > $GLOBALS["maxim"]) $GLOBALS["maxim"] = $item;')); return $GLOBALS['maxim']; } 为什么这个函数与$GL
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;
}
假设您使用的是PHP5.3,您可以使用适当的内联函数,而不是笨重的
create\u function()
语法
array_walk_recursive($arr,function($item,$key) use $maxim {if($item > $maxim) $maxim = $item;}));
注意use$maxim
位——此语法允许您将局部变量传递到内联函数中。使用create_function()
无法实现这一点
正如我所说,这是针对PHP5.3和更高版本的。如果您使用的是PHP5.2或更早版本,那么上述语法将不可用。然而,由于PHP5.2在三年前被宣布为生命终结,如果是这样的话,那么你应该立即考虑升级。你应该问问自己,你是否真的应该使用全局变量?为什么要启用这样一个禁止的功能?但是如果没有全局变量,我怎么能记住多维数组的最高值呢?@aliz_andrei-一个
静态变量可能更有用适当。@Spudley它对静态变量也不起作用。它只适用于$GLOBALS,我使用的是PHP5.5.3,语法似乎已经改变了。现在是:array\u walk\u recursive($arr,function($item,$key)use(&$maxim){if($item>$maxim)$maxim=$item;})代码>