用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;有什么區別?
2019-11-21
按引用傳遞,$var和$array的項指向的是同一塊內存地址,$var改變了$array的項也會同時改變
2017-03-20
array_walk傳遞的是數組的引用,所以回調函數也傳引用就可以改變數組的值,其實是不用返回值的
2016-12-23
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在這個過程中進行了重新賦值,所以最后也會改變數組的值;