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

But*_*kus 2 php

PHP版本5.3.2-1ubuntu4.15

1,起始值:

$value_array = array('0.000','2.530',8);
$op_value = 2;
Run Code Online (Sandbox Code Playgroud)

试试这个:

            foreach($value_array as &$source_value) {
                $source_value = $source_value + $op_value;
            }
Run Code Online (Sandbox Code Playgroud)

得到$ value_array ==(2,4.53,10);

但如果你运行这个:

            array_walk($value_array,function(&$source_value) {
                $source_value = $source_value + $op_value;
            });
Run Code Online (Sandbox Code Playgroud)

你得到$ value_array ==(0,2.53,8);

第一个给出预期结果,第二个给出预期结果.但它确实做了一些事情.多余的0分最终被砍掉了.

为什么是这样?我想使用array_walk但现在必须使用foreach.

Bar*_*mar 14

您可以使用use声明来访问外部变量:

        array_walk($value_array,function(&$source_value) use ($op_value) {
            $source_value = $source_value + $op_value;
        });
Run Code Online (Sandbox Code Playgroud)

或者如果它是全球性的,你可以这样做:

        array_walk($value_array,function(&$source_value) {
            global $op_value;
            $source_value = $source_value + $op_value;
        });
Run Code Online (Sandbox Code Playgroud)