源代码:
<?php
$arr = array(1,2,3);
foreach ($arr as &$v) {
//nothing to do
}
var_dump($arr);
foreach($arr as $v){
//nothing to do
}
var_dump($arr);
结果:
源代码:
<?php
$arr = array(1,2,3);
foreach ($arr as &$v) {
//nothing to do
}
var_dump($arr);
foreach($arr as $v){
//nothing to do
}
var_dump($arr);
结果:
增加了&符号取的就是地址符,你看下下面代码的运行结果。
$arr = [1,2,3];
foreach ($arr as $v){
$v = 5;
}
var_dump($arr);
foreach ($arr as &$v){
$v = 5;
}
var_dump($arr);
看了结果你应该会理解了吧?
15 回答8.4k 阅读
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
首先在foreach上声明的变量其实是不会消失的,也就是$v在第一个foreahch下面之外是可以用的、其次因为第一遍是取地址遍历完成之后$v的地址指向的是$arr的最后一个地址($v->$arr[2])。也就是$arr[2],而第二遍循环在给$v赋值,其实一直就是在给$arr[2]赋值。
第一遍: [1,2,1] 将$arr[0]赋值给了$arr[2]
第二遍: [1,2,2] 将$arr[1]赋值给了$arr[2]
第三遍: [1,2,2] 将$arr[2]赋值给了$arr[2] (因为$arr[2] 其值是2 ,第三遍就是把自己赋值给自己)
这样你就更容易理解了