$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;有什么区别?
按引用传递,$var和$array的项指向的是同一块内存地址,$var改变了$array的项也会同时改变
array_walk传递的是数组的引用,所以回调函数也传引用就可以改变数组的值,其实是不用返回值的
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在这个过程中进行了重新赋值,所以最后也会改变数组的值;