下文是一道簡單的PHP筆試題(進階必備)了,如果你準備去面試的話不防進入來參考這道筆試題吧。
一個前輩發了一道PHP筆試給我,題目大致如下
- $arr = array('1','2','3');
- foreach($arr as $key=>&$val){}
- foreach($arr as $key=>$val){}
- var_dump($arr);
問答案是什么?
看完我就懵了?根本不知道問題的考點在那里,看完兩個foreach的區別在一個是取了地址,一個沒有取地址,這樣會影響結果嗎?
結果輸出的結果居然是如下:
- array(
- 0 => string '1' (length=1)
- 1 => string '2' (length=1)
- 2 => &string '2' (length=1)
- )
表示打印出來的數據為什么會這樣?“3”去哪兒了?造成這樣的原因在于:&取地址符合.
用這種方式來說明foreach對數組的讀取,比較直觀,然后循環就是指針的移動讀取,而且由于是&取值,則直接讀的是地址而是不簡單的賦值,所以當第一個循環結束后,$val跟$arr[2]指的是同一個地址,所以$val值如果改變了,$arr['2']值也跟著改變了.
如果,你運行一下如下代碼:
- $arr = array('1','2','3');
- foreach($arr as $key=>&$val){}
- //開源軟件:Vevb.com
- foreach($arr as $key=>$val){
- var_dump($arr);
- }
- var_dump($arr);
你就能看到變化的過程,和得到之前結果的原因.
|
新聞熱點
疑難解答