翻到PHP文档的foreach那页这样写道:

“foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:

foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。”

那么“第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。”是什么意思?意思就是说用foreach来遍历数组,所操作的是指定数组的一个拷贝,而不是数组本身。就像有一个克隆的你,别人对克隆的你不管怎么拳打脚踢,对你也是没有影响的。

例如:

foreach($array as $k => $v){

  $v = 1;

}

这样的修改方法修改的并不是$array本身,是修改它拷贝的一个数组,虽然一样但不是$array.所以对$array没有影响。

那么要怎么做?要这样做:

foreach($array as $k => $v){

  $array[$k] = 1;

}

虽然$k和$v一样也是拷贝的,但拷贝的$k的值还是和原数组的$k的值是一样的,所以这样就可以成功了。

还有一种比较高级的方法:可以很容易地通过在 $v 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。例如:

foreach($array as &$v){

  $v = 1;

}

unset($v); // 最后取消掉引用

这样也就成功。

转载请标注原文链接:http://www.cnblogs.com/yangwenxin/p/5845212.html

最新文章

  1. TFS API : 四、工作项查询
  2. IOS网络第二天 - 09-多值参数
  3. WAF指纹识别和XSS过滤器绕过技巧
  4. 巧用用layer-list做一个卡片背景
  5. Java集合系列:-----------07Map架构
  6. 剑指Offer 从上往下打印二叉树(dfs)
  7. win7画板橡皮擦改变大小
  8. 【转】HTTP HEAD
  9. 锋利的jQuery读书笔记---jQuery中的事件
  10. Linux 08
  11. 一天搞定HTML----a标签02
  12. 解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题
  13. 我的redis入门之路
  14. c语言中堆栈和静态空间
  15. 判断单向连通图(拓扑排序+tarjan缩点)
  16. js之Ajax下载文件
  17. bzoj千题计划306:bzoj2342: [Shoi2011]双倍回文 (回文自动机)
  18. 工厂模式——Head First
  19. eclipse 最最最常用快捷键
  20. layer.alert自定义关闭回调事件

热门文章

  1. 面向对象设计之SRP(单一职责)原则
  2. SSIS Design6:利用数据流
  3. 实战MEF(4):搜索范围
  4. 深入理解脚本化CSS系列第一篇——脚本化行内样式
  5. Util应用程序框架公共操作类(五):异常公共操作类
  6. php文件扩展名判断
  7. 虚拟目录webconfig的配置
  8. (十四)WebGIS中地图放大缩小的设计和实现
  9. Web.Config文件配置小记
  10. 写出好的 commit message