foreach 与&引用赋值使用

对于&引用赋值大家应该都比较了解,但是当&和foreach一起使用的时候就会出现很有意思的结果。废话不多说,上代码:

//foreach 使用&引用赋值
$arr = array('a', 'b', 'c');
$arr2 = array('d', 'e', 'f');

foreach($arr as &$value){
    $value = '&' . $value;
}
print_r($arr);

//输出结果
Array
(
    [0] => &a
    [1] => &b
    [2] => &c
)

到目前为止一切都还正常,接下来我们遍历一下这个数组

//foreach 使用&引用赋值
$arr = array('a', 'b', 'c');
$arr2 = array('d', 'e', 'f');

foreach($arr as &$value){
    $value = '&' . $value;
}
print_r($arr);
foreach($arr as $value){}
print_r($arr);

//两个print_r输出结果:
Array
(
    [0] => &a
    [1] => &b
    [2] => &c
)
Array
(
    [0] => &a
    [1] => &b
    [2] => &b
)

可以看见遍历之后结果变成了[&a, &b, &b],为什么呢?
首先在我们第一次&遍历的时候,$value是指向的最后一层遍历
$arr[2]的指针地址
在我们进行第二次普通遍历的时候,

$key == 0; $value == &a; $arr[2] = &a;
$key == 1; $value == &b; $arr[2] = &b;
$key == 2; $value == &b; $arr[2] = &b;

最开始的时候我进入了一个误区,就是
当key等于2 的时候,&c不是会重新赋值给$arr[2]吗,为什么会是&b;
这里我解释一下,因为
在key等于1的时候, $arr[2]的值已经是&b了,
也就是在最后一层遍历的时候数组就已经是 [&a, &b, &b]了,所以最后一层遍历的时候根本不会 出现&c。

//foreach 使用&引用赋值
$arr = array('a', 'b', 'c');
$arr2 = array('d', 'e', 'f');

foreach($arr as &$value){
    $value = '&' . $value;
}

foreach($arr as $value){
    print_r($arr);
    echo "\n";
}
//key==0
Array
(
    [0] => &a
    [1] => &b
    [2] => &a
)
//key==1
Array
(
    [0] => &a
    [1] => &b
    [2] => &b
)
//key==2
Array
(
    [0] => &a
    [1] => &b
    [2] => &b
)

最后补充一下,在平时使用&的时候避免出现问题,适当考虑使用unset进行销毁。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值