鍍金池/ 問(wèn)答/數(shù)據(jù)分析&挖掘  PHP  網(wǎng)絡(luò)安全/ php循環(huán)數(shù)組的引用問(wèn)題,zval結(jié)構(gòu)

php循環(huán)數(shù)組的引用問(wèn)題,zval結(jié)構(gòu)

$arr=array("a","b","c","d");

foreach ($arr as &$value) {

}
//$value=&arr[3];$value="d";

foreach ($arr as $key=>$value) {
  echo "<pre>";
  var_dump($arr);

}

結(jié)果如下

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "a"
}

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "b"
}

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "c"
}

array(4) {
  [0]=>
  string(1) "a"
  [1]=>
  string(1) "b"
  [2]=>
  string(1) "c"
  [3]=>
  &string(1) "c"
}

我想問(wèn)下,第二個(gè)foreache函數(shù)前,已經(jīng)確定了$value=&arr[3];那么下面的
在第一次循環(huán)時(shí)$value=$arr[0];是否完全覆蓋了第一個(gè)$value時(shí),
還有為什么,最后的值是abcc,能否從zval結(jié)構(gòu)解釋下嗎

回答
編輯回答
赱丅呿

你的理解是沒(méi)錯(cuò)的,認(rèn)真想想:)

第一個(gè)foreach之后,$value就指向了數(shù)組的第四個(gè)元素:

[a b c d]
       ^
       value

第二各個(gè)foreach,每次都會(huì)覆蓋$value,前3次是這樣的:

[a b c a]
 ^     ^
       value

[a b c b]
   ^   ^
       value

[a b c c]
     ^ ^
       value

第4次循環(huán)到第4個(gè)元素,因?yàn)樵诘?次的時(shí)候已經(jīng)被覆蓋成c了,所以第4次也是c

2017年11月13日 16:55