用array_walk函數(shù)返回為什么不改變原來的數(shù)組?
??? $a=array(1,2,3,4,5,6,7,8,9);
?? ?print_r($a);
?? ?echo'<hr>';
?? ?function test1(&$var){
????//$var=$var*3;加上這句原數(shù)組才改變,為什么不能直接返回return $var*3;來改變原數(shù)組?
??? return $var*3;
?? ?}
?? ?$res=array_walk($a,test1);
?? ?print_r($a);??????????????????????????????????????????????????????
還有return $var*3;和return $var*=3;有什么區(qū)別?
2019-11-21
按引用傳遞,$var和$array的項指向的是同一塊內存地址,$var改變了$array的項也會同時改變
2017-03-20
array_walk傳遞的是數(shù)組的引用,所以回調函數(shù)也傳引用就可以改變數(shù)組的值,其實是不用返回值的
2016-12-23
array_walk?這個函數(shù)只不過是在回調函數(shù)中使用了數(shù)組的參數(shù)(key,value)和一個函數(shù),這個函數(shù)的返回值并不會改變數(shù)組的值. ?
寫$var=$var*3會改變是因為 test1中的參數(shù)$var前加了一個&取地址符,所以函數(shù)內部的$var就是指向數(shù)組值的指針,你對$var賦值就會改變數(shù)組的值啦.
return $var*3;和return $var*=3?
前者就是返回了計算結果,對$var并沒有賦值操作?
后者要先做賦值運算在返回,相當于$var=$var*3 ?return $var*3;$var在這個過程中進行了重新賦值,所以最后也會改變數(shù)組的值;