PHP中如何向array_walk的回调函数按引用传递变量?
报错原因
- 第一个警告是因为
array_walk的第三个自定义参数默认按值传递给回调函数,即便你的回调声明了第三个参数是引用类型,实际收到的也只是$fruits的拷贝,无法修改原数组。 - 第二个语法错误是因为PHP 5.4及以上版本已经移除了「调用时按引用传递」的特性,不允许在调用函数时给参数前加
&符号。
正确实现方案
方案1:匿名函数+use引用传递(最推荐)
不需要使用array_walk的第三个参数,直接通过use(&$fruits)将目标数组按引用引入回调作用域即可,写法更紧凑:
$inventory = [ 'Apples' => ['Golden Delicious', 'Granny Smith','Fuji'], 'Oranges' => ['Valencia', 'Navel', 'Jaffa'] ]; $fruits = []; array_walk($inventory, function($value, $key) use (&$fruits) { $fruits[] = $key; });
方案2:使用独立命名函数
如果一定要用独立定义的命名函数,可以把要修改的数组声明为全局变量,不过该方案会污染作用域,不推荐使用:
$inventory = [ 'Apples' => ['Golden Delicious', 'Granny Smith','Fuji'], 'Oranges' => ['Valencia', 'Navel', 'Jaffa'] ]; $fruits = []; array_walk($inventory, 'fruitTypes'); function fruitTypes($value, $key) { global $fruits; $fruits[] = $key; }
内容的提问来源于stack exchange,提问作者EastsideDev
相关产品推荐
相关产品推荐

