关于foreach 循环引用

最近看到php手册上的一段代码引起了注意 ,代码是这样的

<?php
$arr 
= array('a'=>'first''b'=>'second''c'=>'third');
foreach (
$arr as &$a); // do nothing. maybe?
foreach ($arr as $a);  // do nothing. maybe?
print_r($arr);
?>
Output:

Array
(
    [a] => first
    [b] => second
    [c] => second
)

这样就有两个问题了

1.为什么第一次循环的时候只有第三个元素加上了&

2.再次循环时,第三个参数值发生了变化


闲话不说,直接上代码

foreach循环可以转化为for循环


foreach ($arr as $key => &$a){
}

for($i=0;$i<count($arr);$i++){
  $b = &$arr[$i];
}

array (size=3)
  0 => string 'first' (length=5)
  1 => string 'second' (length=6)
  2 => &string 'third' (length=5)

如果当我们减少循环量的时候,结果是这样的

for($i=0;$i<count($arr)-2;$i++){
  $b = &$arr[$i];
}
array (size=3)
  0 => &string 'first' (length=5)
  1 => string 'second' (length=6)
  2 => &string 'third' (length=5)

这样我我就猜测了一下,&表示了对该元素有引用,所以我们可以这样测试一下
for($i=0;$i<count($arr)-2;$i++){
  $b = &$arr[0];
  $c = &$arr[1];
}
array (size=3)
  0 => &string 'first' (length=5)
  1 => &string 'second' (length=6)
  2 => &string 'third' (length=5)
以上可以得出 当foreach时,系统会默认定义一个变量,单当我们一次循环的时候该变量被
重新赋值,循环结束,该变量引用的为数组最后一个元素。

当第二次循环的时候,可以看这个例子
$arr1 = array("a" => 1, "b" => 2, "c" => 3);
$arr2 = array("x" => 4, "y" => 5, "z" => 6);

foreach ($arr1 as $key => &$val) {
}
foreach ($arr2 as $key => $val) {
  var_dump($arr1);
}
array (size=3)
  'a' => int 1
  'b' => int 2
  'c' => &int 4
array (size=3)
  'a' => int 1
  'b' => int 2
  'c' => &int 5
array (size=3)
  'a' => int 1
  'b' => int 2
  'c' => &int 6
array (size=3)
  'a' => int 1
  'b' => int 2
  'c' => &int 6

第三个元素被依次改变了值





array (size=3)
  0 => &string 'first' (length=5)
  1 => &string 'second' (length=6)
  2 => &string 'third' (length=5)
以上可以得出 当foreach时,系统会默认定义一个变量,单当我们一次循环的时候该变量被
重新赋值,循环结束,该变量引用的为数组最后一个元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值