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
相關文章
相關標籤/搜索