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

来源:3-3 PHP中回调函数的使用

星空飘雨_

2016-12-20 12:52

    $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回答

  • PAN_0109
    2019-11-21 14:38:20

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

  • pp_pcz
    2017-03-20 22:04:06

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

  • fdsgasgg
    2016-12-23 23:40:00

    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在这个过程中进行了重新赋值,所以最后也会改变数组的值;


PHP进阶篇-函数

PHP入门必看教程,带你掌握PHP如何自定义函数和分析常见问题

23901 学习 · 49 问题

查看课程

相似问题