PHP下foreach的作用域,对数组的操作影响
2016-05-16 19:37
555 查看
// @author: huangfeng love 吴佳旻 // 例子1 $arr1 = array('a', 'b', 'c'); foreach ($arr1 as $k => $v) { echo $k . '-' . $v; } $v = 'd'; echo $k; // 2 echo $v; // d var_dump($arr1); /* array 0 => string 'a' (length=1) 1 => string 'b' (length=1) 2 => string 'c' (length=1) */ // 例子2 $arr2 = array('a', 'b', 'c'); foreach ($arr2 as $k => &$v) { echo $k . '-' . $v; } $v = 'd'; echo $k; // 2 echo $v; // d var_dump($arr2); /* array 0 => string 'a' (length=1) 1 => string 'b' (length=1) 2 => &string 'd' (length=1) */ // 例子3 $myfunc = function(){ $arr3 = array('a', 'b', 'c'); foreach ($arr3 as $k => $v) { echo $k . '-' . $v; } $v = 'd'; }; var_dump($k); // null var_dump($v); // null var_dump($arr3); // null // 例子4 $arr4 = array('1'=>'a', '2'=>'b', '3'=>'c'); $arr5 = array('4'=>'x', '5'=>'y', '6'=>'z'); foreach($arr4 as $k => $v) { echo $k . '-' . $v; // 1-a(第一次) 2-b(第二次) 3-c(第三次) // 4-x5-y6-z (三次都一样) foreach ($arr5 as $k => $v) { echo $k . '-' . $v; } echo $k . '-' . $v; // 6-z(第一次) 6-z(第二次) 6-z(第三次) }
PHP的作用域只有2种:
1、全局 可在任何位置通过$GLOBALS访问
2、函数/方法/Closure
结论:
- 只有在当前作用域下定义的元素才能在当前及以内的作用域中访问到,在其以外的作用域是访问不到的(结果是null);
- foreach并没有创建一个作用域(即它里面不算一个作用域),所以在foreach迭代的外面访问键值变量,能够得到其最后一次迭代的值;
- foreach临时创建的两个变量($k 和 $v),在之后被重新赋值时,并不会对原数组造成影响,所以可以放心地在同一个作用域下的多个foreach语句中对不同数组使用同样的$k和$v名称,而不用刻意改变成$k1, $v1;$k2, $v2
- 如果真的要让原数组的$k和$v值被重新赋值后对原数组也同样做出修改,那么就使用引用传值(&)
- 对于嵌套foreach,建议取不一样的键值名称,如$k1, $v1;$k2, $v2,以避免赋值污染
相关文章推荐
- vsftp pasv模式连接失败处理
- php 验证身份证有效性,根据国家标准GB 11643-1999 15位和18位通用
- 【转】Php+ajax+jsonp解决ajax跨域问题
- 使用XHProf查找PHP性能瓶颈
- php单引号和双引号的区别,简单例子对比
- PHP中常用的数组操作方法笔记整理
- phpStudy多站点配置
- Mac OS下PHP环境搭建及PHP操作MySQL常用方法小结
- php 实现背景图上添加 圆形logo
- phpExcel初步使用
- php中GET方法加号变成空格
- PHP,Mysql根据经纬度计算距离并排序
- php在线打包下载
- laravel命令创建项目出现的两个小错误
- php函数imagejpeg,imagepng,imagegif参数详解
- php 5.6.9 on Windows 7 x64 curl 不识别
- php curl获取到json对象并转成数组array
- InputStreamReader和OutputStreamWriter的用法
- php获取网址url的状态
- part1:10-TFTP与NFS服务器配置