foreach中使用引用傳參造成的錯誤

2021-09-21 18:11:50 字數 889 閱讀 7953

同事寫的**,上傳資料的時候,總是會最後一條資料被上一條資料覆蓋掉,導致倒數第二條資料出現兩次,最後一條資料丟失

經排查,是對同一資料進行多次foreach時,有時用的引用傳參,有時沒有用引用傳參造成的,復現問題如下:

$test_array

=array

('one'

=>

'小明'

,'two'

=>

'小張'

,'three'

=>

'小剛',)

;foreach

($test_arrayas&

$item

)foreach

($test_array

as$item

)var_dump

($test_array);

die;

上述**,迴圈中並沒有對陣列進行任何操作,輸出結果為

與預期結果嚴重不符

出現這個問題的原因的引用傳參的使用,引用傳參的使用方法是,使當前的變數只是對原變數的位址的引用,而不是內容的引用。

所以當第乙個foreach使用引用傳參時,迴圈結束時,value這個引數的資料路徑和陣列中的最後乙個引數路徑是一樣的,這時無論對value進行什麼樣的操作,都會浮現到陣列的最後乙個引數上,所以當第二次遍歷時,value被迴圈賦值,導致陣列的最後乙個引數也被不停賦值,這裡最後乙個引數會保留之上的最後乙個引數

引用傳參變數不使用後對變數進行銷毀

以後每次遍歷都使用引用傳參(不安全)

盡量不要在遍歷中使用引用傳參,改用$data[$key]的形式進行修改

foreach 引用傳值

foreach 引用傳值 foreach arr as key vo 這樣我們就完成了對陣列元素新增name屬性和age屬性了,在上面的寫法中,如果我們不填寫 符號,還可以使用下面的辦法來新增屬性,那就是 arr key name 張三 arr key age 20 舉例子 將data1中的1,4,...

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...

C 引用方式傳參,傳值方式傳參( )

1 引用方式傳參 引用相當於是外部變數的別名,實際操作的就是該變數,即在函式內對該變數進行修改的話,在外部該變數也會相應被修改。外部變數的值也會被修改 void changeref int ref 2 傳值方式傳參 實際上是複製了乙個外部變數的副本進入函式中,在函式內操作的為該副本,對該變數的修改並...