一、再次理解兩種語法格式數組
結果:spa
若是僅僅想得到到數組每一個單元的keyip
結果:內存
打印的仍是值,按照foreach的第一種語法格式it
as後邊無論你寫的是$value,仍是$key,都是把數組當前單元的值賦給該變量,不是你想讓它表明什麼,它就表明什麼class
那若是這麼寫呢?變量
結果:cli
根本沒有這種語法格式foreach
二、foreach循環的時候從數組的第一個單元開始,逐個讀出數組的每一個單元,把單元的鍵賦給$k,值賦給$v ,$k和$v僅僅是一個臨時變量
如何理解$k和$v僅僅是一個臨時變量呢,先來看一個案例,咱們慢慢分析循環
請用foreach循環,把$arr每一個單元的值變成原來的2倍
錯解①:
錯解②:
結果:
正解①:
結果:
正解②:傳入&
結果:
緣由分析:$k和$v都是臨時變量,foreach的時候,把每一個數組單元的鍵分別賦值給$k,把每一個數組單元的值分別賦給$v,相等於$v=$arr[$k],$v*2僅僅是改變了$v的值(非&傳遞),並不會影響到$arr[$k],天然也就不會影響到$arr而用第二種方法(引用)的時候,相等於$v=&$arr[$k],$arr[$k]和$v指向同一內存地址,$v*2天然就改變了$arr[$k]的值,也就改變了$arr的值