亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

用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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號