作者:mobiledu2502861763 | 来源:互联网 | 2013-06-27 09:27
由此想到,在平时程序编写过程中,为了减少变量使用和代码简洁的目的,在foreach结束后不会再使用到源数组的前提下,可以考虑foreach判定体内提取出的数组单项命名为与源数组同名
首先来看一段代码:
$arr = array("a","b","c","d");
foreach($arr as $val) {
echo $val.' ';
$arr = array("a1","b1","c1","d1");
foreach($arr as $val) {
echo $val.' ';
}
}
这段代码会输出什么呢?
或者来个简单的:
$arr = array("a","b","c","d");
foreach($arr as $val) {
echo $val.' ';
$arr = array();
}
第一段代码会输出”a a1 b1 c1 d1 b a1 b1 c1 d1 c a1 b1 c1 d1 d a1 b1 c1 d1 “,第二段则会输出”a b c d”。
为什么会这样呢?当时和同事第一次看这段代码时 都以为会输出”a a1 b1 c1 d1 a1 a1 b1 c1 d1…”,但结果确不对,其实想想也是,如果是我们想的那种循环的话,估计这也算是死循环了吧。。
查了相关资料后才明白,foreach循环的数组其实是源数组的一个拷贝,也就是说foreach在第一次循环开始时便把源数组拷贝了一份,之后在循环体中对源数组进行修改时并不会对foreach产生改变。
由此想到,在平时程序编写过程中,为了减少变量使用和代码简洁的目的,在foreach结束后不会再使用到源数组的前提下,可以考虑foreach判定体内提取出的数组单项命名为与源数组同名。
也就是像这样:
$array = array(1,2,3,4,5,6,7);
foreach ($array as $array){
echo $array;
}