對(duì)于foreach循環(huán)的一點(diǎn)小認(rèn)識(shí)
作者: 鄭曉 分類: 編程基礎(chǔ) 發(fā)布于: 2012-08-28 18:15 瀏覽:4,624 沒(méi)有評(píng)論
首先來(lái)看一段代碼:
$arr = array("a","b","c","d");
foreach($arr as $val) {
echo $val.' ';
$arr = array("a1","b1","c1","d1");
foreach($arr as $val) {
echo $val.' ';
}
}
這段代碼會(huì)輸出什么呢?
或者來(lái)個(gè)簡(jiǎn)單的:
$arr = array("a","b","c","d");
foreach($arr as $val) {
echo $val.' ';
$arr = array();
}
第一段代碼會(huì)輸出”a a1 b1 c1 d1 b a1 b1 c1 d1 c a1 b1 c1 d1 d a1 b1 c1 d1 “,第二段則會(huì)輸出”a b c d”。
為什么會(huì)這樣呢?當(dāng)時(shí)和同事第一次看這段代碼時(shí) 都以為會(huì)輸出”a a1 b1 c1 d1 a1 a1 b1 c1 d1…”,但結(jié)果確不對(duì),其實(shí)想想也是,如果是我們想的那種循環(huán)的話,估計(jì)這也算是死循環(huán)了吧。。
查了相關(guān)資料后才明白,foreach循環(huán)的數(shù)組其實(shí)是源數(shù)組的一個(gè)拷貝,也就是說(shuō)foreach在第一次循環(huán)開(kāi)始時(shí)便把源數(shù)組拷貝了一份,之后在循環(huán)體中對(duì)源數(shù)組進(jìn)行修改時(shí)并不會(huì)對(duì)foreach產(chǎn)生改變。
由此想到,在平時(shí)程序編寫(xiě)過(guò)程中,為了減少變量使用和代碼簡(jiǎn)潔的目的,在foreach結(jié)束后不會(huì)再使用到源數(shù)組的前提下,可以考慮foreach判定體內(nèi)提取出的數(shù)組單項(xiàng)命名為與源數(shù)組同名。
也就是像這樣:
$array = array(1,2,3,4,5,6,7);
foreach ($array as $array){
echo $array;
}
本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國(guó)大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/for-little-understanding-of-the-foreach-loop.html