$data = array('a', 'b', 'c');
foreach ($data as $key => $val) {
$val = &$data[$key];
var_dump($data);
}var_dump($data);输出结果是array(3) {
[0]=>
&string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
array(3) {
[0]=>
string(1) "b"
[1]=>
&string(1) "b"
[2]=>
string(1) "c"
}
array(3) {
[0]=>
string(1) "b"
[1]=>
string(1) "c"
[2]=>
&string(1) "c"
}
array(3) {
[0]=>
string(1) "b"
[1]=>
string(1) "c"
[2]=>
&string(1) "c"
}
$val = &$data[$key];这个返回到底是啥意思?
我怎么觉得,我那几个var_dump都应该返回array(a,b,c)
foreach ($data as $key => $val) {
$val = &$data[$key];
var_dump($data);
}var_dump($data);输出结果是array(3) {
[0]=>
&string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
array(3) {
[0]=>
string(1) "b"
[1]=>
&string(1) "b"
[2]=>
string(1) "c"
}
array(3) {
[0]=>
string(1) "b"
[1]=>
string(1) "c"
[2]=>
&string(1) "c"
}
array(3) {
[0]=>
string(1) "b"
[1]=>
string(1) "c"
[2]=>
&string(1) "c"
}
$val = &$data[$key];这个返回到底是啥意思?
我怎么觉得,我那几个var_dump都应该返回array(a,b,c)
foreach ($data as $key => $val) {
$val = &$data[$key];
var_dump($data);
}
0 被赋a地址 a,b,c
1 a地址被赋值为b地址($data中的a变成了b) b,b,c
2 b地址被赋值为c地址($data中的b变成了c) b,c,c
0 || 被赋a地址 || a,b,c
1 || a地址被赋值为b地址($data中的a变成了b) || b,b,c
2 || b地址被赋值为c地址($data中的b变成了c) || b,c,c
$val = &$data[$key];这句话把$data[$key] 和 $val ,第一次执行的时候两者都执行数组data的第一个数据块,里面存放的数据是a;第二次循环的时候首先循环会给val重新赋值为b,结果它所对应的数组的第一个数据块也被改变成了b,接着第二次执行$val = &$data[$key];是对变量val重新指定了内存地址(也就是数组data的第二个数据块),道理就是这样的。不知道楼主明白了不,说的有点乱。 呵呵
第二次将数组$data[1]也就是b的地址赋给数组$data第一个值$data[0],此时$data[0]则变为b 因此输出b,b,c
第二次将数组$data[2]也就是b的地址赋给数组$data第一个值$data[0],此时$data[0]则变为c 因此输出c,b,c(b,b,c)