程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> 一道PHP筆試題

一道PHP筆試題

編輯: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){}

foreach($arr as $key=>$val){
 var_dump($arr);
}
var_dump($arr);

你就能看到變化的過程。和得到之前結果的原因
——

foreach取地址來需求原始的數組是很方便,但小心踩坑哦

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved