You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何向array_walk的回调函数按引用传递变量?

报错原因

  1. 第一个警告是因为array_walk的第三个自定义参数默认按值传递给回调函数,即便你的回调声明了第三个参数是引用类型,实际收到的也只是$fruits的拷贝,无法修改原数组。
  2. 第二个语法错误是因为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:48:01