foreach & 的坑

例1.foreach & as 变量不一样(正常结果)

<?php
$arr = [11, 22, 33, 44, 55];
foreach ($arr as &$val) {
    $val += 1;
    var_dump($val);
}

echo "#############\n";

foreach ( $arr as $aa) {
    var_dump($aa);
}
$ php test.php 
int(12)
int(23)
int(34)
int(45)
int(56)
#############
int(12)
int(23)
int(34)
int(45)
int(56)

例2.foreach & as 变量一样(不期望的结果)

<?php
$arr = [11, 22, 33, 44, 55];
foreach ($arr as &$val) {
    $val += 1;
    var_dump($val);
}

echo "#############\n";

foreach ($arr as $val) {
    var_dump($val);
}

执行结果:

$ php test.php 
int(12)
int(23)
int(34)
int(45)
int(56)
#############
int(12)
int(23)
int(34)
int(45)
int(45)
<?php
$arr = [11, 22, 33, 44, 55];
foreach ($arr as &$val) {
    $val += 1;
    var_dump($val);
}

echo "#############\n";

foreach ($arr as $val) {
    var_dump($val);
}

执行结果:

$ php test.php 
int(12)
int(23)
int(34)
int(45)
int(56)
#############
int(12)
int(23)
int(34)
int(45)
int(45)

例3.foreach & as &变量一样(期望的结果)

<?php
$arr = [11, 22, 33, 44, 55];
foreach ($arr as &$val) {
    $val += 1;
    var_dump($val);
}在这里插入代码片

echo "#############\n";

foreach ($arr as &$val) {
    var_dump($val);
}

执行结果:

$ php test.php 
int(12)
int(23)
int(34)
int(45)
int(56)
#############
int(12)
int(23)
int(34)
int(45)
int(56)

解释说明

例1,就是正常期望的结果,不多解释。
例2,第一遍foreach 结束后, $val 指向空间 $arr[‘4’]; 再次循环的时候 ,相当于如下过程:

$val = $arr['4'] = $arr['0'] = 12;
$val = $arr['4'] = $arr['1'] = 23;
$val = $arr['4'] = $arr['2'] = 34;
$val = $arr['4'] = $arr['3'] = 45; //(关键步骤)
$val = $arr['4'] = $arr['4'] = 45;

例3,第一遍foreach结束后, $val 指向空间 $arr[‘4’]; 再次循环的时候,& $val 相当于一个新的空间,故而不会发生覆盖的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值