<?php
$data = ['a','b','c'];
foreach ($data as &$v) {
}
foreach ($data as $v) {
}
unset($v);
var_dump($data);
這段代碼的結(jié)果如何推導(dǎo)?是什么原理?
4 回答

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗 獲得超4個贊
好像以前見過類似的問題...
<?php
/* 第一次遍歷 */
$v = &$data[0];
$v = &$data[1];
$v = &$data[2];
// 第一次遍歷完成后, 這個時候 $v = &$data[2]
/* 第二輪遍歷 */
// 因為$v等價于$data[2],相當(dāng)于$data[2] = $data[0],把$data[2]賦值為a(即$data[0]); 此時數(shù)組array = ['a','b','a'];
$v = $data[0];
// 因為$v等價于$data[2],相當(dāng)于$data[2] = $data[1],把$data[2]賦值為b(即$data[1]); 此時數(shù)組array = ['a','b','b'];
$v = $data[1];
// 因為$v等價于$data[2],相當(dāng)于$data[2] = $data[2],即賦值為其本身,而此時已經(jīng)被上一次賦值為b; 此時數(shù)組array = ['a','b','b'];
$v = $data[2];
// 第二次遍歷完后, array = ['a','b','b']
unset($v); // unset($v)釋放掉臨時的引用
var_dump($data);
最后輸出:
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "b"
}
- 4 回答
- 0 關(guān)注
- 669 瀏覽
添加回答
舉報
0/150
提交
取消