php foreach循环中使用引用的问题
<?php
$array=array('a','b','c','d');
foreach($array as $key=>$val){
//do something
}
echo $val;//输出d
echo $kay;//输出3
$val='e';
print_r($array);//输出Array ( [0] => a [1] => b [2] => c [3] => d )
?>
在foreach循环中,当循环结束后,$key和$val变量都不会自动释放掉。值会被保留下来。
当foreach使用引用的情况下,会出现如下的情况,需要注意。
代码如下:
<?php
$array=array('a','b','c','d');
foreach($array as $key=>&$val){//使用引用
//do something
}
echo $val;//输出d
echo $kay;//输出3
$val='e';
print_r($array);//输出Array ( [0] => a [1] => b [2] => c [3] => e )
?>
当$val变量使用&引用后,当执行foreach循环结束后,$val指向了和$arrar[3]相同的内存地址。
当foreach循环结束后$val变量还是存在的,所以在foreach循环结束后改变$val的值,就相当于改变了$arrar[3]的值。
相关推荐
-
PHP的foreach中使用引用时需要注意的一个问题和解决方法
一.问题先看一个例子: <?php$ar = array(1, 2, 3);var_dump($ar);foreach ($ar as &$v) {}foreach ($ar as $v) {}var_dump($ar);?>输出为: array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3)}array(3) { [0]=> int(1) [1]=> int(2) [2]=> &
-
php中如何使对象可以像数组一样进行foreach循环
刚接触到题的时候,我也没有考虑到Iterator模式,试了几个一般想法,失败以后....就直接去翻看了foreach的源码实现,期望发现foreach处理对象的时候是否有什么特殊性,可以做为突破口. 跟踪了半天以后发现了核心逻辑中的一个奇怪的switch: 复制代码 代码如下: switch (zend_iterator_unwrap(array, &iter TSRMLS_CC)) { default: case ZEND_ITER_INVALID:
-
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
今天在新服上安装php imagick, 环境如下: php 5.4.13 ImageMagick-6.8.3-10 imagick-3.0.1 可是出错了一个问题.就是死说找不到MagickWand.h: checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h 可是我明明正确安装了ImageMagick的呀.GOOGLE了半天,也解决不了这个问题.后面对照
-
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
本文实例讲述了php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法.分享给大家供大家参考.具体如下: ZipArchive是php自带的一个压缩与解压缩函数了,今天理所当然的情况中使用new ZipArchive来创建zip文件时碰到提示Fatal error: Class ZipArchive not found in错误,感兴趣的朋友就一起来看看解决方法. 测试代码如下: 复制代码 代码如下: //PHP解压缩文件(
-
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
本文实例讲述了php下foreach()错误提示Warning: Invalid argument supplied for foreach() 的解决方法.分享给大家供大家参考.具体实现方法如下: 一.问题: php下foreach()错误提示Warning: Invalid argument supplied for foreach() 错误提示:Warning: Invalid argument supplied for foreach() in E:wampwwwmyshopcart.p
-
深入解析php中的foreach问题
前言:php4中引入了foreach结构,这是一种遍历数组的简单方式.相比传统的for循环,foreach能够更加便捷的获取键值对.在php5之前,foreach仅能用于数组:php5之后,利用foreach还能遍历对象(详见:遍历对象).本文中仅讨论遍历数组的情况. foreach虽然简单,不过它可能会出现一些意外的行为,特别是代码涉及引用的情况下.下面列举了几种case,有助于我们进一步认清foreach的本质.问题1: 复制代码 代码如下: $arr = array(1,2,3);fore
-
PHP has encountered a Stack overflow问题解决方法
昨晚将一个disucz论坛进行转移后,发现打开的页面上回多一个PHP has encountered a Stack overflow 这个提示错误,进过翻译为"PHP遇到堆栈溢出".我就感觉奇怪了,新站没人访问的,怎么可能会溢出. 好吧去discuz官方论坛找找解决方法. 找到的第一解决方法,更新后台缓存,结果不行.接下来检查数据库配置文件,也没有错误.检查php权限也没有错误. discuz官网有人说是php版本太低了,个人对于这种人是比较反感的,这种说法比较扯淡.不用去验证了.
-
PHP中多维数组的foreach遍历示例
复制代码 代码如下: <?php //声明一个三维数组 $info=array( "user"=>array( array(1,"zhangsan",20,"nan"), array(2,"lisi",20,"nan"), array(3,"wangwu",25,"nv") ), "score"=>array( array(1,1
-
php foreach正序倒序输出示例代码
实现代码: // 正序 foreach($files as $file_num => $file) { if(is_file($directory.$file)){ //$file = iconv("gb2312","UTF-8",$file); //或者 iconv("gb2312","UTF-8",$value); $date = substr($file,0,9); echo '<li class="
-
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
今天在测试以下代码时遇到该错误: 复制代码 代码如下: session_start(); $_SESSION['username']=$username; echo "<script language='javascript'>location.href='../admin.php';</script>"; exit(); 出现错误: 复制代码 代码如下: Warning: Cannot modify header information - headers a
-
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
本文实例讲述了ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法.分享给大家供大家参考.具体如下: 一.问题描述: ThinkPHP做文字水印 ,今天做一个电子请帖,就把祝福语贴到图片上面,发现一直报错是取不到图片类型,比如gif,jpg等,并提示call an undefined function exif_imagetype(). 二.解决方法: 出现这个错误就是php.in 配置问题,打开即可:打开扩展 exten
-
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
本文实例讲述了thinkphp视图模型查询失败提示:ERR: 1146:Table 'db.pr_order_view' doesn't exist解决办法.分享给大家供大家参考.具体方法如下: 一.问题描述: 想用thinkphp的视图模型进行关联查询,结果出现了这样的问题(log日志记录):ERR: 1146:Table 'db.pr_order_view' doesn't exist,我就纳闷,视图模型怎么出来的sql是这样的呢,视图模型如下: 复制代码 代码如下: class Order
随机推荐
- asp批量添加修改删除操作示例代码
- SHELL脚本监控JAVA进程的代码
- AngularJS学习笔记之基本指令(init、repeat)
- asp.net button 绑定多个参数
- Laravel学习基础之migrate的使用教程
- php通过字符串调用函数示例
- 使用JavaScript实现Java的List功能(实例讲解)
- php微信支付之APP支付方法
- Lua中的__index方法详解
- C连接Mysql数据库代码
- SqlServer存储过程实现及拼接sql的注意点
- JavaScript hasOwnProperty() 函数实例详解
- jQuery实现的分子运动小球碰撞效果
- jQuery 实现自动填充邮箱功能(带下拉提示)
- js综合应用实例简单的表格统计
- Android判断手机是否是小米MIUI系统的方法
- Android实战打飞机游戏之怪物(敌机)类的实现(4)
- android百度地图之公交线路详情搜索
- jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
- 了解JavaScript函数中的默认参数