- 浏览: 3293515 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (567)
- Web前端-html/表单 (19)
- Web前端-CSS (24)
- Web前端-CSS框架 (4)
- Web前端-JS语言核心 (50)
- Web前端-JS客户端 (26)
- nodejs生态+grunt (10)
- seajs和requirejs (9)
- backbone等框架 (7)
- 模板基础 (7)
- Web前端-deps(不改动) (6)
- Web前端-component (10)
- Web前端-jquery-plugin (13)
- 浏览器兼容性 (6)
- Web前端-使用jQuery (25)
- Web前端-使用jqueryui (6)
- Web前端-性能优化 (3)
- Web协议-HTTP (6)
- ExtJS (13)
- PHP (22)
- PHP面向对象 (4)
- PHP扩展-SOAP (6)
- PHP扩展-curl (4)
- PHP与HTML(导出) (5)
- PHP扩展-综合 (7)
- mysql基础应用 (18)
- 技术心情 (18)
- 算法和面试题 (17)
- 工具(开发)使用 (36)
- memcached原理 (2)
- session和cookie (4)
- UML (2)
- Web前端_FusionCharts (5)
- Web前端_Flex (4)
- Web前端_JSP (3)
- JavaSE (10)
- JavaEE (4)
- tomcat (2)
- Servlet开发 (3)
- Spring开发 (1)
- REST相关 (2)
- 大访问量、高并发 (2)
- 网络编程 (1)
- YII (21)
- linux命令和内核 (12)
- yii与数据库 (10)
- yii与表单 (12)
- yii view层 (1)
- perl (7)
- yii扩展 (7)
- shell (4)
- photoshop (7)
- 视觉设计 (2)
- 我关注的名人在路上 (4)
- 1-自学能力 (1)
- 2-人际沟通能力 (3)
- 3-职业规划能力 (7)
- 4-项目管理能力 (2)
- python (3)
- django (4)
- Mysql高级应用 (6)
- prototype.js (4)
- Web系统安全 (1)
- Web前端-mobile (2)
- egret (6)
- jQuery源码分析 (5)
- fis (4)
最新评论
-
yzq21056563:
感谢作者分享~请教下,http://www.lisa33xia ...
CSS基础:text-overflow:ellipsis溢出文本 -
u012206458:
$.ajax的error,complete,success方法 -
DEMONU:
谢谢,虽然不能给你赞助,但是要给你顶
mysql中key 、primary key 、unique key 与index区别 -
njupt_tolmes:
阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿滕庆亚 ...
CSS基础:text-overflow:ellipsis溢出文本 -
zenmshuo:
用过SpreadJS,也包含数据可视化的图表
推荐几个web中常用js图表插件
这个陷阱在PHP里存在很久了,先看代码:
<?php
$array = array(1, 2, 3);
foreach ($array as &$v) {}
foreach ($array as $v) {}
print_r($array);
?>
运行代码,得到的结果却是:
Array
(
[0] => 1
[1] => 2
[2] => 2
)可以发现,经过两次foreach后,最后一个元素由3变成了2。
为什么会这样呢?这是因为第一次foreach的时候$v成为了一个引用变量($array[2]),如此,当第二次foreach的时候,实际上只是在对这个引用变量($array[2])进行了若干次赋值而已。
第一次:$array[2] = 1,此时$array各元素分别为1,2,1
第二次:$array[2] = 2,此时$array各元素分别为1,2,2
第二次:$array[2] = 2,此时$array各元素分别为1,2,2
一不小心很可能会掉入这个陷阱,为了避免这个问题,需要在第一次foreach后执行unset($v),解决方案有点丑陋,但也没有办法,PHP脚本里的变量一旦生成就在整个脚本中有效,不像Java中,变量是块级别的,仅仅在对应的{}中有效。
PHP的Bug系统里能看到关于这个这个问题的链接,不过从04年提出这个问题到现在已经四年了,估计PHP团队不会解决这个问题了。也是,从PHP的脚本特性来说这也可以说不是Bug,只是苦了我们这些程序员,要多加小心了。
<?php
$array = array(1, 2, 3);
foreach ($array as &$v) {}
foreach ($array as $v) {}
print_r($array);
?>
运行代码,得到的结果却是:
Array
(
[0] => 1
[1] => 2
[2] => 2
)可以发现,经过两次foreach后,最后一个元素由3变成了2。
为什么会这样呢?这是因为第一次foreach的时候$v成为了一个引用变量($array[2]),如此,当第二次foreach的时候,实际上只是在对这个引用变量($array[2])进行了若干次赋值而已。
第一次:$array[2] = 1,此时$array各元素分别为1,2,1
第二次:$array[2] = 2,此时$array各元素分别为1,2,2
第二次:$array[2] = 2,此时$array各元素分别为1,2,2
一不小心很可能会掉入这个陷阱,为了避免这个问题,需要在第一次foreach后执行unset($v),解决方案有点丑陋,但也没有办法,PHP脚本里的变量一旦生成就在整个脚本中有效,不像Java中,变量是块级别的,仅仅在对应的{}中有效。
PHP的Bug系统里能看到关于这个这个问题的链接,不过从04年提出这个问题到现在已经四年了,估计PHP团队不会解决这个问题了。也是,从PHP的脚本特性来说这也可以说不是Bug,只是苦了我们这些程序员,要多加小心了。
发表评论
-
php从5.2升级到5.4
2013-04-24 16:45 6343作者:zccst 现在已有lamp环境,只是php从5.2升 ... -
php文件操作
2012-05-23 19:34 1185作者:zccst 文件操作一直是我的弱项,在使用Java开发 ... -
php性能(内存)问题
2012-05-03 23:50 1110作者:zccst 遇到这样一个问题 $retArr = a ... -
php函数参数引用调用
2012-05-03 19:50 1723作者:zccst 一、参数的两种调用方式 1,传值调用 2 ... -
PHP开发经验总结
2012-04-27 15:19 1704zccst整理(待续) 1.使用内嵌的HTML代码,而不是P ... -
call_user_func_array和call_user_func函数的用法
2012-04-27 15:15 1949zccst转载 下面来和大家 ... -
PHP异常处理
2012-03-24 19:55 1863作者:zccst 一、基本用法 Exception()方法 ... -
php与http(php预定义变量)
2012-02-28 14:04 1308var_dump($_SERVER['REQUEST_URI' ... -
php设置环境变量
2012-01-25 11:40 914实例: $g_config['root'] =dirnam ... -
php5中const、define和static
2011-12-08 10:44 9924一、const 在编程中,我们一般用常量来定义那些在运行时不能 ... -
php上传文件的5种方式
2011-11-20 22:55 4893作者:zccst 一、普通文 ... -
PHP:实现给上传图片加水印的程序代码
2011-11-17 21:17 1266用PHP给上传图片加水印的程序是通过判断文件类型建立图形,然后 ... -
PHP之重要函数
2011-11-04 20:16 1389积少成多——作者:zccst 10,判断必须是整数和是否是 ... -
PHP之类
2011-09-09 18:21 1077关于类的函数 一、与Java相同的类知识 1,类和对象 公有 ... -
PHP之字符串函数
2011-09-07 17:51 1080作者:zccst 2,大小写转换 strtoupper() ... -
PHP调试及代码注释
2011-08-30 14:07 1187一、调试 PHP调试不同于Java 1,常用调试方法: e ... -
PHP之数组
2011-08-04 16:03 1351作者:zccst 5,array_merg ... -
PHP——日期和时间
2011-07-05 14:56 12481,PHP获取当前时间。 ... -
PHP之数组foreach,join
2011-06-08 19:12 2812一,foreach的使用 例如:$arr = array(&q ... -
php之mysql操作
2011-05-18 11:08 1215一、连接,插入,查询 <?php $con = mys ...
相关推荐
在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...
对对Foreach语句测试
C#中Foreach详细用法讲述了Foreach用法,并以具体事例为基础。
jstl forEach标签用法详解,里面介绍地非常详细,有实例说明的。
C-FOREACH用法需要遍历的集合放到items中,然后定义一个temp为每次应用到的集合元素,然后设置起步值及叠加步数
cforEach标签的使用祥解。c:forEach用法的详细介绍。
Mybatis批量foreach merge into的用法,这是介绍Mybatis批量foreach merge into的用法的文档
写PHP好多年,但仍然会犯低级错误,今天遇到个 foreach中引用变量时的坑,PHP版本为 5.6.12 代码如下: <?php $arr = ['a', 'b', 'c', 'd', 'e']; foreach ($arr as $i=>&$a) { $a = $a.'_'. $a; echo $a .'...
主要给大家介绍了关于C#并发实战记录之Parallel.ForEach使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
要想循环遍历可以用forEach,但是在低于ie9的版本下不兼容 var list= document.getElementsByName("name"); for (var i = 0; i ; i++) { console.log(list[i].id); //second console output }
for foreach测试代码 执行1000000万次字符串遍历操作。
C#中的foreach的一些简单的用法,这个rar中是txt压缩的。希望对大家有点用。谢谢。
For 和 Foreach 的效率问题,先猜一下,再运行一下,看猜的对不对。
看代码,再做解释复制代码 代码如下:<... 在foreach循环中,当循环结束后,$key和$val变量都不会自动释放掉。值会被保留下来。当foreach使用引用的情况下,会出现如下的情况,需要注意。复制代码
运作方式为当条件符合时,就会持续重复执行<c:forEach>的本体内容。 语法 语法1:迭代一集合对象之所有成员 <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end=...
自己写的foreach,绝对可以用。 namespace for_reach循环实例 { class Program { static void Main(string[] args) { int[] a={1,2,3,4,5}; foreach (int x in a)
<c:foreach 中各种标签属性的用法,特别是varStatus的巧用
PHP 引用有些类似 C 语言指针, 但一些重要的特性和 C 语言指针不一样, 如果不注意, 会导致程序 BUG. foreach 操作的是数组或对象的拷贝, 但 PHP5, 可以使用引用操作对象元素本身
改进了linux tailq队列下在遍历时删除多个元素的问题。可以使用TAILQ_FOREACH_SAFE下面进行节点删除操作。不会出现野指针问题
参照《全栈性能测试修炼宝典》,关于Foreach controller循环控制器设置的场景脚本