PHP foreach引用&
将以下代码打印
$variable = ['a', 'b', 'c'];
foreach ($variable as $key => &$value) {
}
foreach ($variable as $key => $value) {
}
echo "<pre />";
var_dump($variable);
echo "<pre />";
#结果
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
&string(1) "b"
}
打印出来的结果跟预期结果的不一致,这是因为在第一次的foreach
中使用了引用,顺其而然的$value
变成了引用变量,因而$value
与 $variable[ 2 ]
指向了同一个地址空间(共享变量值)。php中引用可以理解为不同的名字访问同一个内容,php中的引用是不可以进行指针运算,引用并不是实际的内存地址。
在第二个foreach中,不断的将$variable
中的值赋给$value
,进而$variable[2]
的值也会跟随者$value
的变化而变化。
- 循环第一次$value = a ; --> $variable[2] = a
- 循环第二次$value = b ; --> $variable[2] = b
- 循环第三次打印自己$value = b ; --> $variable[2] = b
注:将第二次中的$variable
打印出来的结果,$value
值与$variable[2]
值的变化
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> &string(1) "a" }
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> &string(1) "b" }
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> &string(1) "b" }
一个勤勤恳恳码代码的码农,爱生活,爱代码!