<?php // 数组的引用 $a=array(1,2,3,4,5); foreach($a as $key=>&$value) { $value=$value*2; } print_r($a); echo " $key -------------------$value\r\n"; /** * 若是数组中使用了引用, * 有2种方式来处理被引用的值, 做为一个释放来对待处理 * 1 使用reset()函数,将数组中的指针指向第一个位置,可是有一个问题是, 那个被引用的变量仍是存在的, * 若是在循环外部, 使用了那个引用的变量,仍是能够正常的输出数组的最后一个结果, * 2 使用unset() 函数,能够释放一个变量, * 3 问题的衍生, 若是循环中有变量被引用, 这个变量在循环外部能够被使用, * 若是循环中, 没有变量被引用, 这个变量还能够在外部被引用吗, 主要是想考察变量的做用域. * */ reset($a); echo "$key ++++++++++++ $value\r\n"; unset($value); echo "$key ============== $value\r\n"; /** * 经过如上的测试, 能够看到, foreach循环中的变量是全局的, 而不是一个局部的. * 最明显的就是 $key 变量的. * */ foreach($a as $k=>$v) { $v=$v*2; } print_r($a); /** * 没有加&符号的循环, 会输出一个临时的变量值. * * */ echo "$k @@@@@@@@@@@@@@@@@ $v \r\n"; // 临时数组的引用 foreach([1,2,3,4] as $key=>&$val) { $val=$val*2; } // 此处会有一个语法错误, 主要是$val变量的问题, // unset($val); /** * 总结 : * 若是foreach中有引用, * 1 若是程序的下文中还要继续使用该数组, 建议先reset调整数组中的指针, 避免循环的数据不完整, * 2 若是下文中,要使用那个被引用的变量, 建议先unset, 避免那个变量的初始值不是指望中的. * 3 若是下文中,要使用循环表达式中的值, 建议先unset,主要是key/value字段, 避免变量的初始值不是指望中的, * * */ ?> OUTPUT: Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) 4 -------------------10 4 ++++++++++++ 10 Notice: Undefined variable: value in F:\cygwin64\home\Administrator\code\demo16.php on line 30 Call Stack: 0.0010 353768 1. {main}() F:\cygwin64\home\Administrator\code\demo16.php:0 4 ============== Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) 4 @@@@@@@@@@@@@@@@@ 20