php foreach

<?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