加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php foreach 无法改变数组的值的问题

发布时间:2020-12-13 17:32:44 所属栏目:PHP教程 来源:网络整理
导读:转:http://www.cnblogs.com/yangwenxin/p/5845212.html ? 翻到PHP文档的foreach那页这样写道: “foreach ?语法结构提供了遍历数组的简单方式。 foreach ?仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有

转:http://www.cnblogs.com/yangwenxin/p/5845212.html

?

翻到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);?//?最后取消掉引用

这样也就成功。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读