为了账号安全,请及时绑定邮箱和手机立即绑定

用array_walk函数返回为什么不改变原来的数组?

    $a=array(1,2,3,4,5,6,7,8,9);
    print_r($a);
    echo'<hr>';
    function test1(&$var){

    //$var=$var*3;加上这句原数组才改变,为什么不能直接返回return $var*3;来改变原数组?

    return $var*3;
    }
    $res=array_walk($a,test1);
    print_r($a);                                                      
还有return $var*3;和return $var*=3;有什么区别?

正在回答

3 回答

按引用传递,$var和$array的项指向的是同一块内存地址,$var改变了$array的项也会同时改变

1 回复 有任何疑惑可以回复我~

array_walk传递的是数组的引用,所以回调函数也传引用就可以改变数组的值,其实是不用返回值的

0 回复 有任何疑惑可以回复我~

array_walk 这个函数只不过是在回调函数中使用了数组的参数(key,value)和一个函数,这个函数的返回值并不会改变数组的值.  

写$var=$var*3会改变是因为 test1中的参数$var前加了一个&取地址符,所以函数内部的$var就是指向数组值的指针,你对$var赋值就会改变数组的值啦.

return $var*3;和return $var*=3 

前者就是返回了计算结果,对$var并没有赋值操作 

后者要先做赋值运算在返回,相当于$var=$var*3  return $var*3;$var在这个过程中进行了重新赋值,所以最后也会改变数组的值;


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

用array_walk函数返回为什么不改变原来的数组?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信