說一個極有可能在工作中遇到的問題——foreach的引用
$arr = range(1,3); //[1,2,3] foreach($arr as &$val) { } foreach($arr as $val) { } print_r($arr);
上面這段代碼輸出什麼呢,神奇的竟然是下面這樣,這個我在工作中遇到過一次,當時弄了半天沒弄出個所以然,只是找到了解決辦法,這個問題解決辦法有兩個:
Array ( [0] => 1 [1] => 2 [2] => 2 )
下面這兩種方式都可以解決上面這個問題:
//方法1 foreach ($arr as &$value) { } unset($value); foreach ($arr as $value) { } print_r($arr); //[1,2,3] //方法2 foreach ($arr as &$value) { } foreach ($arr as $val) { } print_r($arr); //[1,2,3] //方法3 foreach ($arr as &$value) { } foreach ($arr as &$value) { } print_r($arr); //[1,2,3]
方法1在官方的手冊中也可以看到http://php.net/manual/en/control-structures.foreach.php,文章中專門有個tips提示這一點$var = 123;
$tmp = &$var;
$tmp = 200;
echo $var;
//200
看看下面這張盜來的圖(哈哈,原文鏈接貼在下面),對上面這個更好的理解
<?php
$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);
var_dump($arr2);
?>
The output is:
array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> &int(6) }
array(3) { ["x"]=> int(4) ["y"]=> int(5) ["z"]=> int(6) }
參考文章:
http://www.cnblogs.com/CraryPrimitiveMan/p/4030748.html#3085766
http://www.jb51.net/article/39299.htm
本文版權歸作者iforever([email protected])所有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。