博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】PHP foreach 小结
阅读量:6940 次
发布时间:2019-06-27

本文共 1107 字,大约阅读时间需要 3 分钟。

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){}

这会导致第二次的循环的结果不正确(可能是php的bug吧)。可以用以下几种来代替:

//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) {}

转载于:https://www.cnblogs.com/lzhitian/archive/2012/11/24/2785992.html

你可能感兴趣的文章
New road
查看>>
第一个计算出地球周长的人——埃拉托色尼
查看>>
PostgreSQL修炼之道:从小工到专家. 3.6 小结
查看>>
Ceph分布式存储实战3.2 CRUSH基本原理
查看>>
想知道的都在这里,分布式离线关系型计算最全总结
查看>>
《21天学通HTML+CSS+JavaScript Web开发(第7版)》——2.2 为发布到Web准备好计算机...
查看>>
Linux 产能工具及其使用技巧
查看>>
Apache Kylin权威指南3.4 管理Cube碎片
查看>>
ROS机器人程序设计(原书第2版)2.1.1 工作空间
查看>>
Deepgreen(Greenplum) 模板数据库template0和template1 探讨
查看>>
《Cocos2d 跨平台游戏开发指南(第2版)》一1.8 让精灵动起来
查看>>
Python-高阶函数习题练习
查看>>
Redis开发运维实践Shell提权问题
查看>>
Copycat - StateMachine
查看>>
【软妹带你学技术】十一份Docker福利包疯狂砸来,看官们还请轻戳呦
查看>>
JTA 深度历险 - 原理与实现
查看>>
【Spark Summit EU 2016】TensorFrames: 在Spark上搭建TensorFlow深度学习框架
查看>>
RDS for MySQL 空间问题的原因和解决
查看>>
java 自适应响应式 SSM 生成静态化 手机 平板 PC 企业网站源码
查看>>
VGA练习之图像的动态显示(后续)
查看>>