Php 为什么带有匿名函数的array_walk提供的结果与foreach不同?

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

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)

但是如果你运行这个:

            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
。谢谢,很高兴您介绍了两种解决方案。