Php 为什么带有匿名函数的array_walk提供的结果与foreach不同?
PHP版本5.3.2-1ubuntu4.15 第一,起始值:Php 为什么带有匿名函数的array_walk提供的结果与foreach不同?,php,Php,PHP版本5.3.2-1ubuntu4.15 第一,起始值: $value_array = array('0.000','2.530',8); $op_value = 2; 试试这个: foreach($value_array as &$source_value) { $source_value = $source_value + $op_value; } 并得到$value_数组==(2,4.53,10
$value_array = array('0.000','2.530',8);
$op_value = 2;
试试这个:
foreach($value_array as &$source_value) {
$source_value = $source_value + $op_value;
}
并得到$value_数组==(2,4.53,10)
但是如果你运行这个:
array_walk($value_array,function(&$source_value) {
$source_value = $source_value + $op_value;
});
得到$value_数组==(0,2.53,8)
第一个给出了预期的结果,第二个没有。但它确实起了作用。多余的0最后被砍掉了
为什么会这样?我想使用array\u walk,但现在必须使用foreach。您可以使用
use
声明来访问外部变量:
array_walk($value_array,function(&$source_value) use ($op_value) {
$source_value = $source_value + $op_value;
});
或者,如果是全球性的,您可以:
array_walk($value_array,function(&$source_value) {
global $op_value;
$source_value = $source_value + $op_value;
});
或者,您也可以使用
array\u walk
的第三个参数指定要传递给回调函数的参数
array\u walk($value\u数组,函数(&$source\u value,$key,$extra\u参数){//$op_值从哪里来?-它在回调中不可用。这一定是答案。我必须将它添加为array_walk
的第二个参数,不是吗?哎呀。不是作为array_walk
的第二个参数,而是作为函数()的参数之一
-或使用使用作为@Barmar-subuntu 4.15?更新时间?;)@JordanaArseno-这不是php版本字符串中的OS版本,这是特定于ubuntu的php版本。此代码在类方法中。$op_值也在其中。全局仍然有效?不,全局仅适用于全局变量。对于必须在闭包中捕获的局部变量,您必须使用use
。谢谢,很高兴您介绍了两种解决方案。