4

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_array == (2,4.53,10);

但是如果你运行这个:

            array_walk($value_array,function(&$source_value) {
                $source_value = $source_value + $op_value;
            });

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

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

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

4

2 回答 2

15

您可以使用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;
        });
于 2012-09-27T00:09:00.130 回答
1

或者你也可以使用第三个参数array_walk来指定一个额外的参数来传递给回调函数。

array_walk($value_array, function(&$source_value, $key, $extra_param) { // <--- (2) and use here
    $source_value = $source_value + $extra_param;
}, $op_value); // <--- (1) pass it here
于 2021-03-07T20:53:06.560 回答