关于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 => "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时,系统会默认定义一个变量,单当我们一次循环的时候该变量被
重新赋值,循环结束,该变量引用的为数组最后一个元素。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
