PHP foreach数组循环的一些问题
来源:互联网 发布:曹睿是谁的孩子 知乎 编辑:程序博客网 时间:2024/05/20 11:52
点击打开链接打开官方手册对foreach的介绍
<?php/*PHP foreach() 语法结构用于遍历操作或输出数组,foreach() 仅能用于遍历数组或对象,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。 语法:*/foreach (array as $value)statement// 或者:foreach (array as $key => $value)statement/*上述语法中,每次循环将当前单元的值赋给 $value 并且数组内部的指针向前移一步。在第二种语法格式中还将当前单元的键名也会在每次循环中赋给变量 $key。 通常循环访问数组都用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 1foreach($arr as &$value){}unset($value);foreach($arr as $value){}//solution 2foreach($arr as &$value){}foreach($arr as &$value){}//solution 3foreach($arr as &$value){}$arr2 = $arr;foreach($arr2 as $value){}//3.防止foreach出现未定义情况,尽量这样来写foreach foreach((array)$arr as $value) {}?>
21 0
- PHP foreach数组循环的一些问题
- PHP foreach数组循环的一些问题
- 转载-PHP foreach数组循环的一些问题
- php foreach循环关于&引用的问题
- 【PHP】数组foreach引发的小问题
- php二维数组的输出 for循环结合foreach
- 细说PHP的foreach循环
- PHP中foreach循环遍历数组
- PHP中foreach循环遍历数组(3)
- 数组和foreach循环 php语法
- php中用foreach改变数组的值的问题
- php中用foreach改变数组的值的问题
- php foreach 二维数组遍历下标问题
- PHP的引用和foreach循环
- PHP中数组循环语句foreach和while的速度之辩
- PHP中数组循环语句foreach和while的速度之辩
- foreach循环二维数组
- JavaScript数组forEach循环
- sqlserver/mysql/oracle实现sql语句分页方法
- 南阳 84 阶乘的0
- GitHub/Bitbucket 通过 SSH 密钥连接
- 预处理
- Unity3D 中改变模型的锚点
- PHP foreach数组循环的一些问题
- 深入理解C++的动态绑定和静态绑定
- 01-Linux-Linux系统安装
- 南阳 658 字符串右移
- GitHub使用
- 南阳 132 最长回文子串
- 黑马程序员-重要代码记录Part1(end)
- Centos 安装中文 输入法
- DBMS_UTILITY.get_time——比较时间差