牛骨文教育服务平台(让学习变的简单)
博文笔记

关于foreach 循环引用

创建时间:2015-04-10 投稿人: 浏览次数:389

最近看到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 =>  "first" (length=5)
  1 =>  "second" (length=6)
  2 => & "third" (length=5)

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

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

这样我我就猜测了一下,&表示了对该元素有引用,所以我们可以这样测试一下
for($i=0;$i<count($arr)-2;$i++){
  $b = &$arr[0];
  $c = &$arr[1];
}
array (size=3)
  0 => & "first" (length=5)
  1 => & "second" (length=6)
  2 => & "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" =>  1
  "b" =>  2
  "c" => & 4
array (size=3)
  "a" =>  1
  "b" =>  2
  "c" => & 5
array (size=3)
  "a" =>  1
  "b" =>  2
  "c" => & 6
array (size=3)
  "a" =>  1
  "b" =>  2
  "c" => & 6

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





array (size=3)
  0 => & "first" (length=5)
  1 => & "second" (length=6)
  2 => & "third" (length=5)
以上可以得出 当foreach时,系统会默认定义一个变量,单当我们一次循环的时候该变量被
重新赋值,循环结束,该变量引用的为数组最后一个元素。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。