资讯专栏INFORMATION COLUMN

foreach 使用引用需要注意的问题

ccj659 / 2323人阅读

摘要:是指将数组的值给,当我们需要直接操作原数组时,就会添加引用符号,这时接收的是数组值的地址空间。输出结果异常分析第一个遍历结束,因为是引用赋值,所以变量和最后一个数组单元是同一个地址空间。

foreach($arr as $key=>$value){}  

foreach是指将数组$arr的值copy给$value,当我们需要直接操作原数组时,就会添加引用符号&,这时$value接收的是数组值的地址空间。

$arr = ["a","b","c"];
foreach($arr as $key=>&$value){}
foreach($arr as $key=>$value){ echo $value; }

输出结果: abb

异常分析:

第一个遍历结束,因为是引用赋值,所以$value变量和最后一个数组单元c是同一个地址空间。

第二个遍历中,是copy赋值,数组的每个值依次赋值给$value(等同于数组中的元素c)的地址空间,所以

第一次遍历后$arr = ["a","b","a"] //变量c因为$value被赋值为a,也跟着变为a

第二次遍历后$arr = ["a","b","b"] //变量c因为$value被赋值为b,也跟着变为b

第三次遍历后$arr = ["a","b","b"] //这里相当于 $value = $value 自己给自己赋值

看懂这个,可以思考一下 下面循环出现异常的原因:

    $arr = array(1,2,3);
    foreach ($arr as $k => $v){
        $v = &$arr[$k];
    }
    var_dump($arr);


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22436.html

相关文章

  • 十个 PHP 开发者最容易犯错误

    摘要:这种行为比最初出现的问题更为棘手,同时也是一种常见的错误源。这意味着这个数组的一份拷贝将会被返回,因此被调函数与调用者所访问的数组并不是同样的数组实例。 showImg(https://segmentfault.com/img/bV7reP?w=620&h=620); PHP 语言让 WEB 端程序设计变得简单,这也是它能流行起来的原因。但也是因为它的简单,PHP 也慢慢发展成一个相对...

    fireflow 评论0 收藏0
  • PHP_数组

    摘要:李寻欢索引数组索引数组,元素的值和下标不存在逻辑关系,而下标只表示值索引位置。键和值,同时向下移动指针获得元素信息,返回的是,关联和索引数组其中关联数组部分。 数组 数据由元素组成,元素由键和值组成 数组分类 关联数组关联数组,元素的下标与元素的值存在逻辑上的关系,称之为关联数组。指的是,键和值之间存在管理。 $a1 = array(name => 李寻欢, age => 34); ...

    zone 评论0 收藏0
  • 工具集核心教程 | 第四篇: Velocity模板引擎入门到进阶

    摘要:是一个基于的模板引擎。模板中未被定义的变量将被认为是一个字符串。公众号回复全栈,领取前端,,产品经理,微信小程序,等资源合集大放送。公众号回复面试,领取面试实战学习资源。 Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web...

    leon 评论0 收藏0
  • 再理解-PHP引用

    摘要:引用本身概念好理解性能也很好但是用好它还是存在着一定的门槛不太好写。写本文的起因是这几天碰到非常好的一个解决方案,让我重新理解了引用。如果下面的代码,你看完就能理解了,说明你引用真是学到家了你也可以直接跳过本文哈。 起因: 日常开发中,我们会碰到构造树的需求,通过id,pid的关系去构建一个树结构,然后对树进行遍历等操作。其实现方式分为两种: 1. 递归, 2. 引用而这两个方法的优缺...

    ermaoL 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<