PHP中调用第二个函数修改第一个函数内数组不生效的原因是什么?
问题根因
PHP 数组参数默认采用值传递模式:调用second函数时传入的是$results数组的副本,所有对$arr的修改仅作用于副本,不会影响first函数内的原始数组,因此你在first中打印的还是未修改的原始值。
解决方案
有两种常用修复方式:
方案1:使用引用传参
在second函数的$arr参数前添加取地址符&,改为引用传递,函数内部操作的就是原始数组本身,无需修改其他调用逻辑:
function second($type, &$arr){ // 仅此处新增&符号 $type .= 's'; if(array_key_exists($type,$arr)){ array_push($arr[$type],'title'); } print_r($arr); }
方案2:返回修改后的数组
如果不想使用引用,可以让second函数返回处理后的数组,在first中接收返回值覆盖原有变量即可:
修改后的second函数:
function second($type,$arr){ $type .= 's'; if(array_key_exists($type,$arr)){ array_push($arr[$type],'title'); } print_r($arr); return $arr; // 新增返回逻辑 }
修改first函数中的调用逻辑:
$results = second('program', $results); // 接收返回值覆盖原变量
内容的提问来源于stack exchange,提问作者gilezni
相关产品推荐
相关产品推荐

