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

时间:2012-09-27 00:00:44

标签: php

PHP Version 5.3.2-1ubuntu4.15

1,起始值:

$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。

2 个答案:

答案 0 :(得分:14)

您可以使用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;
        });

答案 1 :(得分:0)

或者,您也可以使用 array_walk 的第三个参数来指定要传递给回调函数的 extra parameter

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