說一個極有可能在工作中遇到的問題——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])所有,未經作者本人同意禁止任何形式的轉載,轉載文章之後必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利。