博学而笃志 切问而近思 仁在其中
详情
PHP foreach数组循环常见问题
作者:Aliot     发布时间:2017-07-02     评论:0     阅读:0

PHP foreach数组循环常见问题

时间:2014-10-18
 $value)  
statement  
/*上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步。在第二种语法格式中还将当前单元的键名也会在每次循环中赋给变量 $key。 
URL:http://www.bianceng.cn/webkf/PHP/201410/45950.htm
通常循环访问数组都用for循环,例如:*/
for($i = 0; $i < 3; $i++)  
{  
echo $arr[$i];  
}  
//但通过手工代码操作一个大数组来说,用foreach循环的代码更少,上面的代码可以这样写:  
foreach ($arr as $value)  
{  
echo $value;  
}  
//下面来仔细探讨下foreach使用中的一些问题。  
1.foreach 中使用引用的情况。  
//普通情况下,foreach($arr as $value)中的$arr和$value是拷贝,不受外部影响的,即  
$arr = array(0,1,2,3,4,5);  
foreach($arr as $value){  
$arr = array();  
echo $value;  
}  
// 12345  
//但如果$arr是引用的话,情况则不同了,我们用代码来说明问题  
$arr = array(0,1,2,3,4,5);  
$arr = &$arr;  
foreach($arr as $value){  
$arr = array();  
echo $value;  
}  
// 0  
/*这是因为循环用的$arr是直接指向原数据的,而不是copy了一份。 
如果$value是引用,而$arr不是引用,其结果是一样的,同样$value是指向原数据的而不是copy。*/
$arr = array(0,1,2,3,4,5);  
foreach($arr as &$value){  
$arr = array();  
echo $value;  
}  
// 结果是: 0  
//还有一种情况比较特殊,即是如果定义了$arr为全局变量的话,$arr也会变成引用:  
global $arr;  
$arr = array(0,1,2,3,4,5);  
foreach($arr as $value){  
$arr = array();  
echo $value;  
}  
// 结果是: 0  
//2. 如果两次循环一个数组,一定不能这样写  
foreach($arr as &$value){}  
foreach($arr as $value){}  
//这会导致第二次的循环的结果不正确。可以用以下几种来代替:  
view sourceprint?  
//solution 1  
foreach($arr as &$value){}  
unset($value);  
foreach($arr as $value){}  
//solution 2  
foreach($arr as &$value){}  
foreach($arr as &$value){}  
//solution 3  
foreach($arr as &$value){}  
$arr2 = $arr;  
foreach($arr2 as $value){}  
//3.防止foreach出现未定义情况,尽量这样来写foreach  
foreach((array)$arr as $value) {}  
?>

相关文章
loading......
最新动态
所有评论

loading......

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册