PHP foreach引用&
将以下代码打印
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$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与 $a[ 2 ]指向了同一个地址空间(共享变量值),在第二个foreach中,不断的将$arr中的值赋给$value,进而$arr[2]的值也会跟随者$value的变化而变化,将第二次中的$variable 打印出来的结果
1 2 3 |
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" } |
$value值与$arr[2]值的变化